• 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了!

  • 相关阅读:
    Styling a Flex Button control using embedded fonts(转载)
    ArcSDE Administration Command Reference (来自ARCGIS官方)
    FlexPaper_1.2.1.swc——Flex在线显示PDF文档(使用FlexPaper)感悟
    SDE数据的备份与恢复(转载)
    C#中将dll汇入exe,并加壳(转载)
    WEB页面导出为EXCEL/WORD文档的方法 (转载)
    Property Manager Updated 1.0.0.4 小工具介绍(转载)
    Openbravo 3.0安装过程简述
    Installing "uuidossp" library in Postgres 9.1
    BindingSource的事件触发顺序
  • 原文地址:https://www.cnblogs.com/herbertchina/p/5445572.html
Copyright © 2020-2023  润新知