我正在开发.NET 4中的在线工具,将可能很大(数千行)的Excel页面读入DataTable,然后使用SqlBulkCopy.WriteToServer()上传到匹配的Sql Server 2000(即将成为2008)表。它仅供我公司使用,所以我不需要太担心它是否可以用于外部使用。
我让它像梦一样工作,并且自然比我之前执行的逐行插入快得多。但现在我问自己这是不是正确的做法。
首先,从业务角度来看,所有其他数据访问都是通过存储过程授予用户的exec权限,而这需要表级安全性。
其次,大多数在线文档提到,这更像是一次性操作的工具,而不是我的日常用途。
我找不到很多关于使用SqlBulkCopy的否定的引用。我是否应该担心任何安全问题或其他问题?我可以考虑采用其他方法吗?与所有事情一样,我的主要目标是在保证安全和“正确”的方法的同时尽快使其工作。
非常感谢。
答案 0 :(得分:1)
我说你选择这个很好。与常规命令,非批处理调用相比,它用于标准插入语句的性能优势。这就是为什么它可能与存储过程的“标准”方法不同。
我认为安全性不仅仅是简单地验证输入的问题。看来你正在做的就是将数据直接传输到表中,而不是在旁边运行任何自定义SQL。
至于不止一次运行它,我们在生产代码中将它用于多个地方的大数据操作,多次 - 性能优势超过了您必须使用的略微不同的DAL代码。
唯一可能的问题是记忆压力。如果您从对象图(我们做的事情)创建DataTable
,您将在内存中获得该数据的第二个副本(albiet,short lives)。在某些地方,我们更改了代码,使用DataTable
来使用在对象图上实现IDataReader
的自定义类(我说图形,通常是几个平面列表)。这避免了记忆压力。