В мой класс извне передаётся 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
Комментариев нет:
Отправить комментарий