C# 大小/类型的 SqlParameters 数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11783188/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 19:15:08  来源:igfitidea点击:

Array of Sized/Typed SqlParameters

c#.netsqlclient

提问by Jason Eades

I'm trying to create an array of dbTyped and sized SqlParameters. This works fine but results in changing code both places if I need another column.

我正在尝试创建一个 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;

What is a better way of doing this?

这样做的更好方法是什么?

采纳答案by Jon Skeet

You can use object initializerexpressions:

您可以使用对象初始值设定项表达式:

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 }
};

You could also create a list in the same way, which is often preferred:

你也可以用同样的方式创建一个列表,这通常是首选:

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 }
};

Or you could even write an extension method on SqlParameter:

或者你甚至可以写一个扩展方法SqlParameter

public static SqlParameter WithValue(this SqlParameter parameter, object value)
{
    parameter.Value = value;
    return parameter;
}

Then use it like this:

然后像这样使用它:

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)
};

回答by Stig

you can add the value back like this:

您可以像这样添加值:

 new SqlParameter("@first_name", SqlDbType.VarChar, 50).value = to.FirstName

回答by competent_tech

You can use the constructor overloadthat allows you to specify the value as a parameter.

您可以使用构造函数重载,该重载允许您将值指定为参数。

For example:

例如:

SqlParameter[] parameters = {
                              new SqlParameter("@first_name", SqlDbType.VarChar, 50, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Current, to.FirstName),

etc...

回答by Marc Gravell

A better way? Sure: let a tool help you, for example "dapper":

更好的方法?当然:让工具帮助您,例如“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();

This then handles all the parameterisation and materialization for you.

然后它会为您处理所有参数化和实现。