我有一个这样的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();
答案 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;
}