【问题标题】:How to create optional parameters using object array如何使用对象数组创建可选参数
【发布时间】:2015-10-07 12:01:40
【问题描述】:

我正在创建一个必须使用或不使用参数的方法。 我正在使用对象数组,这样我就可以同时保存字符串、整数、二进制类型等。

方法: SQLDB_UsingReader(string strSQL_WithParam, params object[,] obj)

错误: 数组必须是一维数组。

附言 此方法 SQLDB_UsingReader(string strSQL_WithParam, object[,] obj) 有效,但是当我添加“params”作为创建可选参数时搜索的解决方案时,会发生错误.

代码

public void SQLDB_UsingReader(string strSQL_WithParam, params object[,] obj)
    {
        try
        {
            using (SqlCommand mCmd = new SqlCommand(strSQL_WithParam, mConn))
            {
                for (int i = 0; i < obj.Length / 2; i++)
                {
                    if (obj[i, 1] == null || obj[i, 1].ToString() == "" || obj[i, 1].ToString().Length == 0)
                    { mCmd.Parameters.Add(new SqlParameter(obj[i, 0].ToString(), DBNull.Value)); }
                    else
                    { mCmd.Parameters.Add(new SqlParameter(obj[i, 0].ToString(), obj[i, 1])); }
                }
                mConn.Open();
                mDataReader = mCmd.ExecuteReader();
                mConn.Close();
            }
        }
        catch (Exception ex) { ex.ToString(); }
    }

【问题讨论】:

  • 您能否举例说明您希望如何调用您的方法(如果您可以使其工作)?
  • @sstan :我可以将其用作 SQLDB_UsingReader("select * from table") 或 SQLDB_UsingReader("select * from table where id=@ID",obj) where obj has "Parameter_Name"," Parameter_Value"

标签: c#


【解决方案1】:

使用Dictionary&lt;string, object&gt;。您有两个值:一个字符串和一个您希望设置的每个参数的对象。要么创建一个类,每个类都包含一个,然后将 params 用于该类的数组,或者简单地将内置类型用于命名值的集合。

public void SQLDB_UsingReader(string strSQL_WithParam, IDictionary<string, object> obj)
{
    try
    {
        string where = obj.Any() ? ("where " + string.Join("AND", obj
                                   .Select(x => x.Key +"==@" + x.Key)) : "";
        using (SqlCommand mCmd = new SqlCommand(strSQL_WithParam + where, mConn))
        {
            foreach pair in obj
            {
                ... (use pair.Value and pair.Key)
            }
            ...
        }
    }
    ...
}

【讨论】:

  • 感谢您的建议。我试过这个,但我怎样才能使它成为可选参数。我可以将其用作: x.SQLDB_UsingReader("select * from table") 或 x.SQLDB_UsingReader("select * from table where id=@ID",Dictionary) Where Dictionary has "Parameter_Name","Parameter_Value"
  • 您可以通过聚合参数名称将 where 子句并行构建为字符串。 string.Join("AND", obj.Select(x =&gt; x.Key +"==@" + x.Key) 假设每个键都是一个列名。您仍然需要检查字典中的任何内容,因此无需添加 where 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多