c#中的大容量查询插入
本文关键字:查询 插入 大容量 | 更新日期: 2023-09-27 18:19:46
我正在使用从源表到目标表的批量查询插入记录。源表有10000条记录。假设源表有一列sid int
、sname varchar(60)
,目标列有sid int
、sname varchar(30)
。
现在,由于源sname
和目标sname
的长度问题,我无法成功插入所有记录。因为只有几行出现问题。
现在我的问题是,有没有任何方法可以使用大容量插入将记录插入到目标表中,从而插入正确的记录,而不插入不正确的记录。
我正在使用c#3.5
我正在使用的代码
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(constring, SqlBulkCopyOptions.UseInternalTransaction))
{
try
{
//Edit mapping.
bulkCopy.ColumnMappings.Add("AddressID", "AddressID");
bulkCopy.ColumnMappings.Add("AddressLine1", "AddressLine1");
bulkCopy.ColumnMappings.Add("City", "City");
//specify destination table.
bulkCopy.DestinationTableName = "[Address]";
bulkCopy.BatchSize = 100;
bulkCopy.NotifyAfter = 100;
// bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
bulkCopy.WriteToServer(table);
}
catch (Exception ex)
{
richTextBox1.AppendText("'n'n" + ex.Message);
}
}
谢谢。
您是通过SQL Server使用BULK INSERT
,还是使用System.Data.SqlClient.SqlBulkCopy
类?
如果您使用的是BULK INSERT
T-SQL,那么您可以将MAXERRORS
设置为等于您想要的阈值(默认值为10,这就是为什么您的`BULK INSERT可能会取消)。
BULK INSERT YourDb.YourSchema.YourTable
FROM 'c:'YourFile.txt'
WITH
(
FIELDTERMINATOR =' |',
ROWTERMINATOR =' |'n',
MAXERRORS = 1000 -- or however many rows you think are exceeding the 30 char limit
)
编辑
在看到您正在使用SqlBulkInsert
类之后,我认为您最好在调用SqlBulkCopy.WriteToServer()
方法之前修改DataTable
:
foreach(DataRow row in table.Rows)
{
if (row["YourColumnThatExceeds30Chars"].ToString().Length > 30)
row["YourColumnThatExceeds30Chars"] =
row["YourColumnThatExceeds30Chars"].ToString().Substring(0, 30);
}