




















SqlParameter remoting 客户端调用服务端方法: DataSet ExecuteProc(string procedurename, SqlParameter[] a);
调用: DataSet ds = SqlUtil.ExecuteProc("存储过程名", parameters);//
parameters 为
SqlParameter[] 类型的实例
报错: 由于安全限制,无法访问类型 System.Runtime.Remoting.ObjRef。原因是
SqlParameter不能序列化.需要添加一个类来转换.
添加如下类:
namespace Modal.SerSqlParameter
{
[Serializable]
public class SerSqlParameter
{
public SerSqlParameter(SqlParameter sPara)
{
this.paraName = sPara.ParameterName;
this.paraLen = sPara.Size;
this.paraVal = sPara.Value;
this.sqlDbType = sPara.SqlDbType;
}public SqlParameter ToSqlParameter()
{
SqlParameter para = new SqlParameter(this.paraName, this.sqlDbType, this.paraLen);
para.Value = this.paraVal;
return para;
}private string paraName = "";
public string ParaName
{
get { return this.paraName; }
set { this.paraName = value; }
}
private int paraLen = 0;服务端原来的
//原来的
public DataSet ExecuteProc(string procedurename, SqlParameter[] arParams) {
DataSet ds = SqlUtil.ExecuteProc(procedurename, arParams);
return ds;
}//修改为
public DataSet ExecuteProc(string procedurename, IList<SerSqlParameter> arParams)
{
SqlParameter[] p = new SqlParameter[arParams.Count];
for (int i = 0; i < arParams.Count;i++ )
{
p[i]=arParams[i].ToSqlParameter();
}
DataSet ds = SqlUtil.ExecuteProc(procedurename, p);
return ds;
}
客户端修改为
//原来的调用
DataSet ds = SqlUtil.ExecuteProc("过程名", parameters);//修改后
IList<SerSqlParameter> list = new List<SerSqlParameter>();
foreach (SqlParameter pa in parameters)
{
SerSqlParameter serparam = new SerSqlParameter(pa);
list.Add(serparam);
}
DataSet ds=SqlUtil.ExecuteProc("过程名",list);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。