2023年6月21日发(作者:)

SqlParameter序列化的问题SqlParameter remoting 客户端调⽤服务端⽅法: DataSet ExecuteProc(string procedurename, SqlParameter[] a); 调⽤: DataSet ds = eProc("存储过程名", parameters);// parameters 为 SqlParameter[] 类型的实例

报错: 由于安全限制,⽆法访问类型 。原因是SqlParameter不能序列化.需要添加⼀个类来转换. 添加如下类:namespace Parameter{ [Serializable] public class SerSqlParameter { public SerSqlParameter(SqlParameter sPara) { me = terName; n = ; l = ; ype = ype; } public SqlParameter ToSqlParameter() { SqlParameter para = new SqlParameter(me, ype, n); = l; return para; } private string paraName = ""; public string ParaName { get { return me; } set { me = value; } } private int paraLen = 0; public int ParaLen { get { return n; } set { n = value; } } private object paraVal = null; public object ParaVal { get { return l; } set { l = value; } } private SqlDbType sqlDbType = ar; public SqlDbType SqlDbType { get { return ype; } set { ype = value; } } }}服务端原来的

//原来的public DataSet ExecuteProc(string procedurename, SqlParameter[] arParams) {

DataSet ds = eProc(procedurename, arParams); return ds; }//修改为 public DataSet ExecuteProc(string procedurename, IList arParams) { SqlParameter[] p = new SqlParameter[]; for (int i = 0; i < ;i++ ) { p[i]=arParams[i].ToSqlParameter(); } DataSet ds = eProc(procedurename, p); return ds; }

客户端修改为

//原来的调⽤DataSet ds = eProc("过程名", parameters);//修改后 IList list = new List(); foreach (SqlParameter pa in parameters) {

SerSqlParameter serparam = new SerSqlParameter(pa); (serparam); } DataSet ds=eProc("过程名",list);

2023年6月21日发(作者:)

SqlParameter序列化的问题SqlParameter remoting 客户端调⽤服务端⽅法: DataSet ExecuteProc(string procedurename, SqlParameter[] a); 调⽤: DataSet ds = eProc("存储过程名", parameters);// parameters 为 SqlParameter[] 类型的实例

报错: 由于安全限制,⽆法访问类型 。原因是SqlParameter不能序列化.需要添加⼀个类来转换. 添加如下类:namespace Parameter{ [Serializable] public class SerSqlParameter { public SerSqlParameter(SqlParameter sPara) { me = terName; n = ; l = ; ype = ype; } public SqlParameter ToSqlParameter() { SqlParameter para = new SqlParameter(me, ype, n); = l; return para; } private string paraName = ""; public string ParaName { get { return me; } set { me = value; } } private int paraLen = 0; public int ParaLen { get { return n; } set { n = value; } } private object paraVal = null; public object ParaVal { get { return l; } set { l = value; } } private SqlDbType sqlDbType = ar; public SqlDbType SqlDbType { get { return ype; } set { ype = value; } } }}服务端原来的

//原来的public DataSet ExecuteProc(string procedurename, SqlParameter[] arParams) {

DataSet ds = eProc(procedurename, arParams); return ds; }//修改为 public DataSet ExecuteProc(string procedurename, IList arParams) { SqlParameter[] p = new SqlParameter[]; for (int i = 0; i < ;i++ ) { p[i]=arParams[i].ToSqlParameter(); } DataSet ds = eProc(procedurename, p); return ds; }

客户端修改为

//原来的调⽤DataSet ds = eProc("过程名", parameters);//修改后 IList list = new List(); foreach (SqlParameter pa in parameters) {

SerSqlParameter serparam = new SerSqlParameter(pa); (serparam); } DataSet ds=eProc("过程名",list);