Должен там так или иначе вставить оптом Систему. Данные. DataTable в C# в таблицу SQL Server с помощью процедуры хранилища и передавая эту таблицу как параметр?
Таблица не будет иметь постоянного числа записей.
Да, есть способ:
DataTable dataTable = null; // your data needs to be here
try
{
ConnectionStringSettings mConString = ConfigurationManager.ConnectionStrings["SiteSqlServer"];
// Optional truncating old table
using (SqlConnection connection = new SqlConnection(mConString.ConnectionString))
{
connection.Open();
// Delete old entries
SqlCommand truncate = new SqlCommand("TRUNCATE TABLE MYTABLE", connection);
truncate.ExecuteNonQuery();
}
SqlBulkCopy bulkCopy = new SqlBulkCopy(mConString.ConnectionString, SqlBulkCopyOptions.TableLock)
{
DestinationTableName = "dbo.MYTABLE",
BatchSize = 100000,
BulkCopyTimeout = 360
};
bulkCopy.WriteToServer(dataTable);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Поэкспериментируйте с BatchSize - 100000 мне подошло - он не должен быть больше - иначе скорость миграции уменьшится. BatchSize не ограничивает ваши данные - это просто размер каждого «пакета», который будет отправлен на сервер sql.
SiteSQLServer должен находиться внутри вашего app.config или web.config. Если нет, вам нужно изменить здесь параметры.
Пожалуйста, измените MYTABLE на имя вашей таблицы.
В версиях SQL Server до 2008 года единственным способом передать всю таблицу DataTable в SQL Server был SqlBulkCopy . Вы должны поместить все данные в (возможно, временную) промежуточную таблицу и вызвать процедуру для обработки промежуточных данных.
В SQL Server 2008 были введены возвращающие табличное значение определяемые пользователем типы. Они предоставляют несколько отличных новых возможностей для работы с наборами данных.
Взгляните на MSDN:
и, вероятно, второй в двух моих сообщениях в блоге: