Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Как с помощью DataAdapter заполнить только структуру DataTable без данных?

В мой класс извне передаётся DataAdapter, мне нужно используя его заполнить только структуру (столбцы с типами данных) DataTable без данных. Следующий код, вопреки моим ожиданиям, подтягивает все данные, которые может вернуть SelectCommand.
public class myclass { private readonly DataAdapter da; private DataSet ds; public myclass (DataAdapter da) { this.ds = new DataSet(); this.da = da; var dt = ds.Tables.Add("MyTable"); da.Fill(0, 0, dt); } }
метаданные по использованному Fill
// // Сводка: // Добавляет или обновляет строки в объекте System.Data.DataTable для получения // соответствия строкам в источнике данных, начиная с указанной записи и вплоть // до заданного максимального количества получаемых записей. // Параметры: // startRecord: // Номер записи (с нуля), с которой необходимо начать. // // maxRecords: // Максимальное число извлекаемых записей. // // dataTables: // Объект System.Data.DataTable для заполнения из источника данных.
Каким способом можно заполнить только структуру в DataTable ?


Ответ

Как было указано в комментарии, статья MSDN содержит описание того как это сделать.
var dataAdapter = .... var dataTable = new DataTable(); dataAdapter.FillSchema(dataTable, SchemaType.Mapped)
Если, объект DbDataAdapter создавался с описанием параметров связи между таблицами и столбцам (mapping) с помощью свойства TableMappings у DbDataAdapter, то когда указывается SchemaType.Mapped схема исходных данных пытается дополнить схему объекта DataTable пропущенными столбцами, на основании данных, которые возвращаются SelectCommand. Если вы хотите принимать только данные, и игнорировать параметры связи, определенные для TableMapping, то стоит использовать SchemaType.Source

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

Отправить комментарий