Почему оба SqlDataAdaptor должны указывать Table дважды? - PullRequest
1 голос
/ 22 апреля 2011

Я пытаюсь Fill мой DataSet с запросом в SqlDataAdaptor.Чего я не понимаю, так это почему я должен специально указывать имя таблицы в Fill, когда я уже дал SqlDataAdapter, какую таблицу запрашивать.

См. Код ниже, в строке запроса уже есть «FooTable», зачем мне снова «FooTable» в SqlDataAdapter.Fill?

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FooTable", connectionString);
DataSet ds = new DataSet();
da.Fill(ds, "FooTable");

1 Ответ

4 голосов
/ 22 апреля 2011

На самом деле, вам не нужно делать это в этом случае, так как у вас есть один набор результатов, с которым вы имеете дело.Вот соответствующая выдержка из MSDN:

Когда указанный запрос возвращает несколько результатов, каждый набор результатов помещается в отдельную таблицу.Дополнительные наборы результатов именуются путем добавления целых значений к указанному имени таблицы (например, «Таблица», «Таблица1», «Таблица2» и т. Д.).Поскольку для запроса, не возвращающего строки, не создано ни одной таблицы, при обработке запроса на вставку с последующим запросом на выбор таблица, созданная для запроса на выборку, будет называться «Таблица», поскольку она является первой созданной таблицей.Приложения, использующие имена столбцов и таблиц, должны обеспечивать отсутствие конфликтов с этими шаблонами именования.Метод Fill поддерживает сценарии, в которых DataSet содержит несколько объектов DataTable, имена которых отличаются только регистром.В таких ситуациях Fill выполняет сравнение с учетом регистра, чтобы найти соответствующую таблицу, и создает новую таблицу, если точного соответствия не существует.

Выше взято из этой страницы в документах MSDN SqlDataAdaptor.Fill ().

Таким образом, если ваш запрос представлял собой хранимую процедуру или какой-либо другой тип запроса, содержащий несколько наборов результатов, вам нужно указать, какой набор результатов является командой Fillдолжен использовать.Это то, что делает второй параметр.В противном случае предположения делаются самой командой Fill.

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

...