我正在尝试创建一个dbTyped和大小的SqlParameters数组。这样可以正常工作,但如果我需要另一列,则会导致两个地方的代码都发生变化。
SqlParameter[] parameters = {
new SqlParameter("@first_name", SqlDbType.VarChar, 50),
new SqlParameter("@last_name", SqlDbType.VarChar, 50),
new SqlParameter("@middle_name", SqlDbType.VarChar, 50),
new SqlParameter("@empid", SqlDbType.Int)
};
parameters[0].Value = to.FirstName;
parameters[1].Value = to.LastName;
parameters[2].Value = to.MiddleName;
parameters[3].Value = to.EmpId;
这样做的更好方法是什么?
答案 0 :(得分:13)
您可以使用object initializer表达式:
SqlParameter[] parameters =
{
new SqlParameter("@first_name", SqlDbType.VarChar, 50) { Value = to.FirstName },
new SqlParameter("@last_name", SqlDbType.VarChar, 50) { Value = to.LastName },
new SqlParameter("@middle_name", SqlDbType.VarChar, 50) { Value = to.MiddleName },
new SqlParameter("@empid", SqlDbType.Int) { Value = to.EmpId }
};
您也可以使用相同的方式创建列表,这通常是首选:
List<SqlParameter> parameters = new List<SqlParameter>
{
new SqlParameter("@first_name", SqlDbType.VarChar, 50) { Value = to.FirstName },
new SqlParameter("@last_name", SqlDbType.VarChar, 50) { Value = to.LastName },
new SqlParameter("@middle_name", SqlDbType.VarChar, 50) { Value = to.MiddleName },
new SqlParameter("@empid", SqlDbType.Int) { Value = to.EmpId }
};
或者您甚至可以在SqlParameter
上编写扩展方法:
public static SqlParameter WithValue(this SqlParameter parameter, object value)
{
parameter.Value = value;
return parameter;
}
然后像这样使用它:
List<SqlParameter> parameters = new List<SqlParameter>
{
new SqlParameter("@first_name", SqlDbType.VarChar, 50).WithValue(to.FirstName),
new SqlParameter("@last_name", SqlDbType.VarChar, 50).WithValue = to.LastName)
new SqlParameter("@middle_name", SqlDbType.VarChar, 50).WithValue(to.MiddleName),
new SqlParameter("@empid", SqlDbType.Int).WithValue(to.EmpId)
};
答案 1 :(得分:0)
您可以使用允许您将值指定为参数的constructor overload。
例如:
SqlParameter[] parameters = {
new SqlParameter("@first_name", SqlDbType.VarChar, 50, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current, to.FirstName),
etc...
答案 2 :(得分:0)
更好的方法?当然:让一个工具帮助你,例如“dapper”:
var rows = conn.Query<YourType>(@" your tsql ",
new { first_name = to.FirstName,
middle_name = to.MiddleName,
last_name = to.LastName,
empid = to.EmpId }).ToList();
然后为您处理所有参数化和具体化。
答案 3 :(得分:-2)
你可以像这样添加值:
new SqlParameter("@first_name", SqlDbType.VarChar, 50).value = to.FirstName