Путаница между SqlCommand и SqlDataAdapter

#c# #.net #sqlcommand #sqldataadapter

#c# #.net #sqlcommand #sqldataadapter

Вопрос:

все, я студент и новичок в .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, я обнаружил, что 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).

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

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

Ответ №1:

Errorstacks правильно подвел итог:

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

Кроме того:

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

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

Небольшое замечание — наборы данных и таблицы данных в последнее время немного вышли из игры из-за Linq2SQL и Entity Framework.
Но, конечно, знание простых старых SqlCommands / адаптеров / читателей приветствуется 🙂

Ответ №2:

Поторопитесь! Обратите свое внимание на LINQ!!!

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

Пример LINQ:

dim результат = из emp в MyDataContext.Employees где emp.Salary> 10000 Выберите emp.Идентификатор, emp.Фамилия, ….

myDatagrid.источник данных = результат.ToList

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

И у вас даже будет intellisense для таблиц, столбцов и объектов SQL!

Комментарии:

1. Это не ответило на вопрос. Кроме того, иногда LINQ недоступен. Например, он недоступен в версии .NET CE до версии 3.5.