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

.net security sqlbulkcopy

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

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

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

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

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

非常感谢。

一般承认的答案

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

我认为安全性不仅仅是简单地验证输入的问题。您正在使用的所有功能是将数据直接传输到表中,而不是一起运行任何自定义SQL。

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

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




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因