Что лучший способ состоит в том, чтобы создать Пустой Объект dataTable со схемой таблицы SQL-сервера?
Я думаю, что стоит упомянуть оператор SET FMTONLY :
SET FMTONLY ON;
SELECT * FROM SomeTable
SET FMTONLY OFF;
Никакие строки не обрабатываются и не отправляются клиенту из-за запроса, когда SET FMTONLY включен.
Причина, по которой это может быть удобно, заключается в том, что вы можете предоставить любой запрос / хранимую процедуру и вернуть только метаданные набора результатов.
Вот что я сделал:
var conn = new SqlConnection("someConnString");
var cmd = new SqlCommand("SET FMTONLY ON; SELECT * FROM MyTable; SET FMTONLY OFF;",conn);
var dt = new DataTable();
conn.Open();
dt.Load(cmd.ExecuteReader());
conn.Dispose();
Работает хорошо. Спасибо, AdaTheDev.
Попробуйте:
ВЫБЕРИТЕ TOP 0 * FROM [TableName]
и используйте SQLDataAdapter для заполнения DataSet, затем получите таблицу из этого DataSet.
Вы всегда можете создать свой собственный:
DataTable table = new DataTable("TableName");
table.Columns.Add(new DataColumn("Col1", typeof(int)));
table.Columns.Add(new DataColumn("Col2", typeof(int)));
table.Columns.Add(new DataColumn("Col3", typeof(string)));
table.Columns.Add(new DataColumn("Col4", typeof(int)));
table.Columns.Add(new DataColumn("Col5", typeof(string)));
Очевидным недостатком является то, что вам придется обновлять свой код при каждом изменении схемы базы данных.
Предполагая, что вы можете подключиться к базе данных SQL, которая содержит таблицу, которую вы хотите скопировать, в тот момент, когда вы хотите это сделать, вы можете использовать обычное преобразование набора результатов в таблицу данных с использованием
select * from <tablename> where 1=2
в качестве исходного запроса.
Это вернет пустой набор результатов со структурой исходной таблицы.