将C#表数据插入SQL Server表
是否可以使用存储过程将C#中的System.Data.DataTable批量插入SQL Server表并将该表作为参数传递 该表没有固定数量的记录。是的,有一种方法:将C#表数据插入SQL Server表,c#,tsql,datatable,C#,Tsql,Datatable,是否可以使用存储过程将C#中的System.Data.DataTable批量插入SQL Server表并将该表作为参数传递 该表没有固定数量的记录。是的,有一种方法: DataTable dataTable = null; // your data needs to be here try { ConnectionStringSettings mConString = ConfigurationManager.Connect
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);
}
请尝试批量大小-100000对我来说是好的-它不应该大于那个值-否则速度可能会下降。BatchSize不会限制您的数据—它只是将发送到sql server的每个“数据包”的大小
SiteSQLServer应位于app.config或web.config中。如果没有,您需要在此处更改参数
请将MYTABLE更改为您的表名。在2008年之前的SQL Server版本中,将整个数据表推送到SQL Server的唯一方法是。您必须将所有数据推入(可能是临时的)暂存表,并调用该过程来处理暂存数据 在SQLServer2008中,引入了表值用户定义类型。它们提供了一些很好的新选项来处理数据集 看看MSDN:
数据表
作为存储过程参数
(用户定义的表类型)传递。但您将失去SqlBulkCopy