SqlBulkCopy是常规批量插入的方法吗?

时间:2011-08-05 08:49:02

标签: .net security sqlbulkcopy

我正在开发.NET 4中的在线工具,将可能很大(数千行)的Excel页面读入DataTable,然后使用SqlBulkCopy.WriteToServer()上传到匹配的Sql Server 2000(即将成为2008)表。它仅供我公司使用,所以我不需要太担心它是否可以用于外部使用。

我让它像梦一样工作,并且自然比我之前执行的逐行插入快得多。但现在我问自己这是不是正确的做法。

首先,从业务角度来看,所有其他数据访问都是通过存储过程授予用户的exec权限,而这需要表级安全性。

其次,大多数在线文档提到,这更像是一次性操作的工具,而不是我的日常用途。

我找不到很多关于使用SqlBulkCopy的否定的引用。我是否应该担心任何安全问题或其他问题?我可以考虑采用其他方法吗?与所有事情一样,我的主要目标是在保证安全和“正确”的方法的同时尽快使其工作。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我说你选择这个很好。与常规命令,非批处理调用相比,它用于标准插入语句的性能优势。这就是为什么它可能与存储过程的“标准”方法不同。

我认为安全性不仅仅是简单地验证输入的问题。看来你正在做的就是将数据直接传输到表中,而不是在旁边运行任何自定义SQL。

至于不止一次运行它,我们在生产代码中将它用于多个地方的大数据操作,多次 - 性能优势超过了您必须使用的略微不同的DAL代码。

唯一可能的问题是记忆压力。如果您从对象图(我们做的事情)创建DataTable,您将在内存中获得该数据的第二个副本(albiet,short lives)。在某些地方,我们更改了代码,使用DataTable来使用在对象图上实现IDataReader的自定义类(我说图形,通常是几个平面列表)。这避免了记忆压力。