ASP.NET 4 SQL Методы? - PullRequest
       19

ASP.NET 4 SQL Методы?

2 голосов
/ 14 октября 2010

В настоящее время работаю над веб-приложением ASP.NET и начинаю понимать, что снова и снова пишу один и тот же код Boiler Plate.

т.е.

        SqlDataReader myReader = null;
        SqlCommand SQLcmd = new SqlCommand();
        SqlConnection SQLConn = new SqlConnection();
        String SQLStatement = "Select this 'nd That";
        SQLConn.ConnectionString = SQLConnectionString;
        SQLConn.Open();
        SQLcmd.Connection = SQLConn;
        SQLcmd.CommandText = SQLStatement;
        myReader = SQLcmd.ExecuteReader();
        while (myReader.Read())
        {
            //Do some awesome
        }
        SQLConn.Close();
    }

Как этомир .NET играет с SQL сейчас?

Как я могу не тратить полдня на копирование и вставку этого кода?

Все ли используют Linq для SQL?и если да, то, пожалуйста, укажите мне учебник!

Большое спасибо!

Даниэль

Ответы [ 4 ]

2 голосов
/ 14 октября 2010

Общее настроение в наши дни - использовать что-то вроде ORM .

Популярные варианты:

Linq2Sql действительно ORM, но он больше не разрабатывается в Microsoft.

1 голос
/ 14 октября 2010

Вместо того, чтобы говорить вам использовать ORM, я собираюсь показать вам, как я это делаю (набрано из памяти) (и я собираюсь быть утерянным и взволнованным и кто знает, что еще):

Я вижу, ты делаешь то, что я делаю, а именно:

    SqlDataReader myReader = null;
    SqlCommand SQLcmd = new SqlCommand();
    SqlConnection SQLConn = new SqlConnection();
    String SQLStatement = "Select this 'nd That";
    SQLConn.ConnectionString = SQLConnectionString;
    SQLConn.Open();
    SQLcmd.Connection = SQLConn;
    SQLcmd.CommandText = SQLStatement;
    myReader = SQLcmd.ExecuteReader();
    while (myReader.Read())
    {
        //Do some awesome
    }
    SQLConn.Close();
}

И поэтому я делаю нечто подобное. Обратите внимание, что вы создаете новую SqlCommand, новую SqlConnection, и вы используете общую SqlConnectionString (которую вам нужно иметь возможность перезагрузить из центрального места, да?), Поэтому я делаю это:

public class Global{
  public string ConnectionString {get;set;} 
  public Global(){
    ConnectionString = //load from wherever, this allows me to reload it later, via API? ;)
  }
  public SqlCommandFactory(string sprocName, SqlConnection con){
    return new SqlCommand{
      CommandText = sprocName,
      Connection = con,
      CommandTimeout = 0,
      ConnectionTimeout = 0,
      CommandType = StoredProcedure
    };
  }
}

//in my other class that uses this code:
public List<string> /* for simplicity sake, strigns */ GetListOfStringsFromDatabase(){
  List<string> returnValue = new List<string>();

  // use of using ensures that I don't forget to clean something up here!!!!
  using ( SqlConnection con = new SqlConnection(Global.ConnectionString) ) {
    SqlCommand cmd = Global.SqlCommandFactory("mysproc", con);
    cmd.Parameters.Add( "@param1", SqlDbType.VarChar ).Value = "somestring";

    con.Open();
    using ( SqlDataReader reader = cmd.ExecuteReader() ) {
      while (reader.Read()) {
        returnResult.Add( reader[0].ToString() );
      }
    }
  }

return returnValue;
}

Но ORM, вероятно, будет лучше. Просто не то, что мы чувствуем, работает хорошо для нашей ситуации.

1 голос
/ 14 октября 2010

Используйте ORM. Чтобы узнать больше об ORM, посетите http://en.wikipedia.org/wiki/Object-relational_mapping.. Некоторые варианты для .Net:

  • NHibernate : Самый мощный, но с глубоким обучением. Бесплатный и открытый исходный код.
  • Entity Framework: EF1 был не очень многообещающим, но похоже, что Microsoft вкладывает в него большие средства, поскольку EF4 очень мощная. Поскольку вы упомянули ASP.Net 4, я предлагаю вам взглянуть на EF4.
  • SubSonic Имеет кривую быстрого обучения. Легко использовать. Подходит для малых и средних приложений ИМО. Бесплатный и открытый исходный код.

Наиболее известные коммерческие ORM: Active Record , LLBLGen (который имеет собственный ORM, а также генератор OR-Mapping), DevForce (бесплатно для баз данных менее 10 таблиц)
Возможно, вы захотите взглянуть на это сообщение в блоге , чтобы увидеть список самых известных доступных ORM.

0 голосов
/ 14 октября 2010

Нет «одного» пути. Некоторые люди используют Linq для sql, некоторые используют Entity Framework, некоторые используют nHibernate, некоторые используют блоки данных Enterprise Library и т. Д. ... все зависит от ваших потребностей и того, что вам удобно.

...