Как сделать код C # с использованием ADO.NET, IDbConnection и IDbCommand менее многословным? - PullRequest
3 голосов
/ 11 ноября 2011

Можно ли как-нибудь сократить этот код базы данных?Это работает хорошо, но кажется очень многословным и повторяющимся.Полагаю, что было бы лучше обернуть некоторые из них в метод, но есть ли другие улучшения, которые можно было бы сделать, чтобы сократить его?

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

Ответы [ 2 ]

7 голосов
/ 11 ноября 2011

Если вы не хотите использовать полное OR / M, почему бы не попробовать Dapper ?

4 голосов
/ 11 ноября 2011

Если вы ищете общее изменение, я рекомендую использовать Microsoft Entity Framework (или любое другое OR / M).Это приведет к гораздо меньшему количеству кода, так как вам не придется снова писать этот код низкого уровня.И это хорошо работает со многими, многими базами данных.Вы можете изменить базовую базу данных с относительно небольшими изменениями.

Если вы просто ищете изменение в этом конкретном методе, тогда я просто воспользуюсь решением, которое вы уже упомянули сами.Продолжайте и рефакторинг каждого повторяющегося абзаца в метод.

From:

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

Into (например):

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

Кроме того, при вызове mmethod,Я предпочитаю определять некоторые константы для имен параметров, а не записывать строку каждый раз снова.Это избавляет меня от орфографических ошибок.

Определите их в соответствующей области, например, в качестве учеников, если вы используете их не только в этом методе (что, я думаю, так и будет).

...