8

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;

これを行うより良い方法は何ですか?

4

4 に答える 4

19

オブジェクト初期化式を使用できます。

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)
};
于 2012-08-02T18:04:08.457 に答える
0

値をパラメーターとして指定できるコンストラクターオーバーロードを使用できます。

例えば:

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

etc...
于 2012-08-02T18:09:04.380 に答える
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();

これにより、すべてのパラメータ化と具体化が処理されます。

于 2012-08-02T18:30:17.500 に答える
-2

次のように値を追加できます。

 new SqlParameter("@first_name", SqlDbType.VarChar, 50).value = to.FirstName
于 2012-08-02T18:02:14.880 に答える