zoukankan      html  css  js  c++  java
  • SqlParameter序列化的问题

    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 int ParaLen
            {

                
    get { return this.paraLen; }
                
    set { this.paraLen = value; }
            }

            
    private object paraVal = null;
            
    public object ParaVal
            {
                
    get { return this.paraVal; }
                
    set { this.paraVal = value; }
            }

            
    private SqlDbType sqlDbType = SqlDbType.NVarChar;
            
    public SqlDbType SqlDbType
            {
                
    get { return this.sqlDbType; }

                
    set { this.sqlDbType = value; }
            }
        }
    }



    服务端原来的  

    //原来的
    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);

  • 相关阅读:
    Python ES操作
    SVN总结
    MongoDB问题总结
    MySQL
    PyQt小工具
    Python logging模块
    shell脚本
    cmd命令
    eclipse java 项目打包
    Robot Framework:failed: Data source does not exist.错误
  • 原文地址:https://www.cnblogs.com/pan11jing/p/2051827.html
Copyright © 2011-2022 走看看