【发布时间】:2013-02-19 21:23:41
【问题描述】:
我在使用 c# 应用程序将大量数据行提交到数据库 (sql 2008 R2) 的代码时遇到问题。
我现在正在创建一个相当大的 XML 文件(大约 30Mb),其中包含大约 40.000 行应该插入到数据库中。
从我作为变量传递给数据库的这个 xml 文档中,我有一个存储过程,它将从中读取数据并进行适当的插入或更新。
伪 c# 代码:
String xml = xmlWriter.ToString();
SqlCommand cmd = new SqlCommand("sp_CommitData", connection)
cmd.Variables.AddWithValue("@xml", xml);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
/* Read return data */
}
伪tsql代码:
INSERT INTO DataTable
xmldata.value('@uID','[uniqueidentifier]') AS [uID]
FROM<
@xml.nodes('/data/m/r') [xmldata](xmldata)
这种方法过去对我来说效果很好,但现在数据对于这种方法来说似乎非常庞大......提交数据需要 3 分钟以上,而且时间很长。 :(
这一定是一个很常见的问题,你们在类似的情况下是怎么做的? 您对如何使用 c# 提交相当大量的数据有什么好的建议吗?该解决方案必须是线程安全的,所以我不太喜欢 bcp 或类似方法。
亲切的问候 画了
【问题讨论】:
-
您使用的是 SQL Server 2008 吗?表值参数应该有很大帮助。
-
如果你要插入大量数据我建议你看看
SqlBulkCopy类 -
是否所有 40.000 行都在一个事务中?如果是这样,它们必须在一个事务中吗?
-
是的,一个事务中有大约 40.000 行分布在三个表中,必须作为事务更新。
标签: c# .net tsql stored-procedures