zoukankan      html  css  js  c++  java
  • WCF SqlParameter序列化问题解决方案

    博文 http://www.cnblogs.com/pan11jing/archive/2011/08/19/2051827.html 通过自定义类,再在WCF端转换的方式解决问题,之后出现了一个很小的不便

    先给出原博文代码:

    首先是添加在WCF端的类:

        [Serializable]
        [DataContract]
        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;
            }
    
            [DataMember]
            public string ParaName
            {
                get { return this.paraName; }
                set { this.paraName = value; }
    
            }
            private string paraName = "";
    
            [DataMember]
            public int ParaLen
            {
    
                get { return this.paraLen; }
                set { this.paraLen = value; }
            }
            private int paraLen = 0;
    
            [DataMember]
            public object ParaVal
            {
                get { return this.paraVal; }
                set { this.paraVal = value; }
            }
            private object paraVal = null;
    
            [DataMember]
            public SqlDbType SqlDbType
            {
                get { return this.sqlDbType; }
    
                set { this.sqlDbType = value; }
            }
            private SqlDbType sqlDbType = SqlDbType.NVarChar;
        }

    然后在WCF方法中,使用:

    public List<QueryResult_Marketing_DealerQuantity> ExecuteQueryMarketing_DealerQuantityBySql(string sql, string key, params SerSqlParameter[] sqlParameters)
    {
            SqlParameter[] p = new SqlParameter[sqlParameters.Length];
            for (int i = 0; i < sqlParameters.Length; i++)
            {
                p[i] = sqlParameters[i].ToSqlParameter();
            }
            return ExecuteQueryBySql<QueryResult_Marketing_DealerQuantity>(sql, key, p);
    }

    最后是客户端调用:

    List<SerSqlParameter> sqlParameters = new List<SerSqlParameter>();
    
    sqlParameters.Add(new SerSqlParameter(new SqlParameter { ParameterName = "@StartDateTime", SqlDbType = SqlDbType.DateTime, Value = model.StartDateTime }));
    
    var resultList = _wcf.ExecuteQueryMarketing_DealerQuantityBySql(searchSql.ToString(), GlobalVariables.gs_safekey, sqlParameters.ToArray());

    问题来了,因为我原来的代码是:

    List<SqlParameter> sqlParameters = new List<SqlParameter>();
    
    sqlParameters.Add(new SqlParameter { ParameterName = "@StartDateTime", SqlDbType = SqlDbType.DateTime, Value = model.StartDateTime });
    
    var resultList = _wcf.ExecuteQueryMarketing_DealerQuantityBySql(searchSql.ToString(), GlobalVariables.gs_safekey, sqlParameters.ToArray());

    对于每一个添加都需要添加 

    new SerSqlParameter()

    这个工作量,也不是盖的,于是乎想起了这个方法:

    /// <summary>
    /// 附加追加方法
    /// </summary>
    /// <param name="sqlParameters"></param>
    /// <param name="sqlParameter"></param>
    public static void Add(this List<SerSqlParameter> sqlParameters, SqlParameter sqlParameter)
    {
            SerSqlParameter ser = new SerSqlParameter(sqlParameter);
            sqlParameters.Add(ser);
    }

    这样之后,对于原代码,只需要改个类名就OK了!

  • 相关阅读:
    『PyTorch』第二弹_张量
    大数据技术之_12_Sqoop学习_Sqoop 简介+Sqoop 原理+Sqoop 安装+Sqoop 的简单使用案例+Sqoop 一些常用命令及参数
    HBase 构建 Scanner 体系图解
    HBase 默认刷写文件 flush_compact.xml 注释解析
    Vim 命令、操作、快捷键全集
    10个在UNIX或Linux终端上快速工作的建议
    如何三招帮你排查Linux中的硬件问题
    介绍一些有趣的MySQL pager命令
    MySQL数据库select语句的使用方法
    能够在Linux系统中运行的5款大型耐玩游戏
  • 原文地址:https://www.cnblogs.com/herbertchina/p/5445572.html
Copyright © 2011-2022 走看看