3

とにかく、このデータベースコードを短くすることはできますか? 正常に動作しますが、非常に冗長で繰り返しのようです。その一部をメソッドにラップする方が良いと思いますが、それを短縮するために他に改善できることはありますか?

using (IDbConnection theConn = GetDatabaseConnection())
using (IDbCommand theCmd = theConn.CreateCommand())
{
    theCmd.CommandText = @"INSERT INTO table(one, two, three,four)
                                   VALUES (@one,@two,@three,@four)";
    var parameterOne = theCmd.CreateParameter();
    parameterOne.ParameterName = "@one";
    parameterOne.Value = "text";
    theCmd.Parameters.Add(parameterOne);

    var parameterTwo = theCmd.CreateParameter();
    parameterTwo.ParameterName = "@two";
    parameterTwo.Value = "text";
    theCmd.Parameters.Add(parameterTwo);

    var parameterThree = theCmd.CreateParameter();
    parameterThree.ParameterName = "@three";
    parameterThree.Value = "text";
    theCmd.Parameters.Add(parameterThree);

    var parameterFour = theCmd.CreateParameter();
    parameterFour.ParameterName = "@four";
    parameterFour.Value = "text";
    theCmd.Parameters.Add(parameterFour);

    theCmd.ExecuteNonQuery();
 }
4

2 に答える 2

7

完全な OR/M を使用したくない場合は、Dapperを試してみませんか?

于 2011-11-11T08:08:14.810 に答える
4

一般的な変更を探している場合は、Microsoft Entity Framework (またはその他の OR/M) を使用することをお勧めします。これにより、この種の低レベル コードを再度記述する必要がないため、コードが大幅に削減されます。そして、非常に多くのデータベースでうまく機能します。比較的小さな変更で、基礎となるデータベースを変更できます。

この特定の方法の変更を探しているだけの場合は、すでに言及した解決策を使用します. 先に進み、各繰り返し段落をメソッドにリファクタリングします。

から:

var parameterOne = theCmd.CreateParameter();
parameterOne.ParameterName = "@one";
parameterOne.Value = "text";
theCmd.Parameters.Add(parameterOne);

に (例):

private void addParameter(IDbCommand theCmd, string paramName, string paramValue )
{
    var createdParameter = theCmd.CreateParameter();
    createdParameter.ParameterName = paramName;
    createdParameter.Value = paramValue ;
    theCmd.Parameters.Add(createdParameter);
}

また、mmethod を呼び出すときは、毎回文字列を書き直すよりも、パラメーター名にいくつかの定数を定義することを好みます。これでスペルミスを防げます。

このメソッド以外で使用する場合は、クラス メンバーなどの適切なスコープで定義します (これは確かに当てはまると思います)。

于 2011-11-11T08:33:27.060 に答える