Запутан между SqlCommand и SqlDataAdapter - PullRequest
9 голосов
/ 15 октября 2011

каждый я студент и новичок в разработке .NET и особенно в разработке MVC3, но для одного из моих проектов я буду работать над ним и проходить этап обучения Проблема и путаница, с которыми я сталкиваюсь, связана с подключением к БД, хотя я полагаю, что при извлечении записей из базы данных это примерно так:

//Method One:
var conn = new SqlConnection(conString.ConnectionString);
const string cmdString = "Select * FROM table";
var cmd = new SqlCommand(cmdString, conn); 
var mySqlDataAdapter = new SqlDataAdapter(cmd);
mySqlDataAdapter = new SqlDataAdapter(cmd);
mySqlDataAdapter.Fill(myDataSet, "design");
// making a new SqlCommand object with stringQuery and SqlConnection object THEN a new SqlDataAdapter object with SqlCommand object and THEN filling up the table with the resulting dataset.

Но пока я проверял MSDN Library , я обнаружил, что SqlDataAdapter предлагает конструкторы SqlDataAdapter (String, String), которые непосредственно принимают SelectCommand и строку подключения для инициализации, таким образом пропуская роль SqlCommand между , вот так:

//Method Two:
var conn = new SqlConnection(conString.ConnectionString);
const string cmdString = "Select * FROM table";
var mySqlDataAdapter = new SqlDataAdapter(cmdString, conn);
mySqlDataAdapter.Fill(myDataSet, "design");

Выглядит коротко и красиво для меня, но я смущен здесь тем, что, если это возможно таким образом, то почему большинство книг / учителей проходит раньше (SqlCommand's way).

  • Какая разница между SqlCommand и SqlDataAdapter?
  • Какой метод лучше Один или Два?
  • Боюсь ли я использовать ярлык во втором методе, который может повлиять на безопасность или производительность?

Заранее извиняюсь, если я звучу как новичок или размыт Буду признателен за любую помощь, которая может прояснить мои концепции! Спасибо! :)

Ответы [ 2 ]

7 голосов
/ 16 октября 2011

Стеки ошибок суммировали правильно:

  • SqlAdapter используется для заполнения набора данных.
  • SqlCommand может использоваться для любых целей, связанных с операциями создания / чтения / обновления / удаления, выполнения хранимых процедур и многим другим.

Кроме того:

  • SqlCommand МОЖЕТ иметь одно большое преимущество против использования необработанных строк в отношении безопасности - они МОГУТ защитить вас от инъекций Sql.Просто используйте параметры для значений, предоставленных пользователем, а не string.Format (...).

Мое личное предпочтение - обернуть ЛЮБЫЕ строки sql в SqlCommand и добавить к нему SqlParameters, чтобы избежать Sql.Внедрение злонамеренными пользователями.
Что касается производительности двух подходов - я не ожидаю, что есть какая-либо разница.(Если кто-то может доказать, что я не прав - сделайте это!).
Поэтому я бы предложил придерживаться более длинного варианта 1 и использовать команды плюс параметры, если это необходимо.

Небольшое примечание: наборы данных и таблицы данных в последнее время немного вышли из-за Linq2Sql и Entity Framework.
Но, конечно, знание простых старых SqlCommands / Adapters / Readers приветствуется :)

0 голосов
/ 16 октября 2011

спешный!Обращаем ваше внимание на LINQ !!!

Больше нет таких грандиозных вещей, как SQLDataset или TableAdapters, нет открытого соединения.С LINQ все становится гладче.

Пример LINQ:

dim result = from emp в myDataContext.Employees, где emp.Salary> 10000 Выберите emp.ID, emp.SurName, ....

myDatagrid.datasource = result.toList

С LINQ вам не нужно беспокоиться об одинарных кавычках или обрезках в запросах ...

И вы дажеиметь смысл в таблицах, столбцах и объектах SQL!

...