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 回答