如何将sqlParameterCollection传递给Command对象

时间:2013-10-04 11:34:07

标签: c#

我有一个这样的Command对象:

SqlCommand cmd1 = new SqlCommand();

如何在另一个例程中构建sqlParameterCollection并将此集合传递给此Command对象?

我有这段代码:

private SqlParameterCollection BuildParameters()
{
    SqlCommand cmd2 = new SqlCommand();

    cmd2.Parameters.Add("@year", SqlDbType.Int).Value = 2013;

    return cmd2.Parameters;
}

我想做这样的事情:

cmd1.Parameters = BuildParameters();

3 个答案:

答案 0 :(得分:0)

你可以把它作为一种扩展方法处理,但说实话,我真的不知道这有多么有用

public static IEnumerable<IDbDataParameter> BuildParameters(this IDbCommand command, params KeyValuePair<string, DbType>[] parameters)
{
    foreach(KeyValuePair<string, DbType> kvpParam in parameters)
    {
        IDbDataParameter param = command.CreateParameter();
        param.ParameterName = kvpParam.Key;
        param.DbType = kvpParam.Value;
        yield return param;
    }
}

答案 1 :(得分:0)

SqlCommand.Parameters属性是只读的,因此您无法为其分配SqlParameterCollection对象。

您可能希望从BuildParameters返回一个SqlParameter数组:

    private SqlParameter[] BuildParameters()
    {
        SqlParameter[] para = new SqlParameter[3];
        para[0] = new SqlParameter("@year", SqlDbType.Int) { Value = 2013 };
        return para;
    }

然后您可以执行以下操作: -

   SqlCommand cmd1 = new SqlCommand();
    cmd1.Parameters.Clear();
    cmd1.Parameters.AddRange(BuildParameters());

答案 2 :(得分:0)

您可以简单地遍历集合。

foreach (var mysqlParamater in oMySqlParameterCollection)
        {
            oMySqlCommand.Parameters.Add(mysqlParamater);
        }

我编写了一个接受mysqlparamater集合的方法以及SP名称,你可以使用它如下: -

public int ExecuteNonQuery(MySqlParameterCollection oMySqlParameterCollection, string storedProcedure)
    {
        int affectedRows = 0;
        _oMySqlConnection.Open();
        MySqlCommand oMySqlCommand = new MySqlCommand
        {
            CommandType = CommandType.StoredProcedure,
            CommandText = storedProcedure,
            Connection = _oMySqlConnection
        };
        foreach (var mysqlParamater in oMySqlParameterCollection)
        {
            oMySqlCommand.Parameters.Add(mysqlParamater);
        }
        affectedRows = oMySqlCommand.ExecuteNonQuery();
        _oMySqlConnection.Close();
        return affectedRows;
    }