【问题标题】:How to make C# code using ADO.NET, IDbConnection and IDbCommand less verbose?如何使用 ADO.NET、IDbConnection 和 IDbCommand 使 C# 代码不那么冗长?
【发布时间】:2011-12-26 19:59:59
【问题描述】:

无论如何我可以使这个数据库代码更短吗?它工作正常,但似乎非常冗长和重复。我想将其中的一些包装在一个方法中会更好,但是还有其他改进可以缩短它吗?

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

【问题讨论】:

标签: c# database ado.net parameters verbosity


【解决方案1】:

如果您不想使用完整的 OR/M,为什么不尝试Dapper

【讨论】:

  • 有趣,我没有意识到这一点。谢谢!
【解决方案2】:

如果您正在寻找一般更改,我建议使用 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);
}

另外,在调用方法时,我更喜欢为参数名称定义一些常量,而不是每次都重新编写字符串。这样可以避免拼写错误。

将它们定义在适当的范围内,例如作为类成员,如果您在不止此方法中使用它们(我想肯定会如此)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多