0

我有一个这样的命令对象:

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();
4

3 回答 3

1

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());
于 2013-10-04T11:55:57.367 回答
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;
    }
}
于 2013-10-04T11:48:20.360 回答
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;
    }
于 2016-06-16T15:57:08.153 回答