.net SqlBulkCopy是常规批量插入的方法吗?
我正在.NET 4中开发一个在线工具,将可能较大(数千行)的Excel页面读取到数据表中,然后使用SqlBulkCopy.WriteToServer()将其上载到匹配的Sql Server 2000(即将于2008年)表中。它只在我的公司内部使用,所以我不需要太担心外部使用的安全问题 我让它像做梦一样工作,而且自然比我以前执行的逐行插入快得多。但现在我在问自己,这是否是正确的方法 首先,从业务的角度来看,所有其他数据访问都是通过授予用户exec权限的存储过程进行的,而这需要表级安全性 其次,大多数在线文档都提到这是一个一次性操作的工具,而不是日常使用的地雷 我找不到太多关于使用SqlBulkCopy的负面信息。是否有任何安全问题或其他我应该担心的问题?有没有其他我可以考虑的方法?与所有事情一样,我的主要目标是让它在安全和“正确”的方法下尽快工作.net SqlBulkCopy是常规批量插入的方法吗?,.net,security,sqlbulkcopy,.net,Security,Sqlbulkcopy,我正在.NET 4中开发一个在线工具,将可能较大(数千行)的Excel页面读取到数据表中,然后使用SqlBulkCopy.WriteToServer()将其上载到匹配的Sql Server 2000(即将于2008年)表中。它只在我的公司内部使用,所以我不需要太担心外部使用的安全问题 我让它像做梦一样工作,而且自然比我以前执行的逐行插入快得多。但现在我在问自己,这是否是正确的方法 首先,从业务的角度来看,所有其他数据访问都是通过授予用户exec权限的存储过程进行的,而这需要表级安全性 其次,大多
非常感谢。我想说你对这个选择很满意。与标准的insert语句相比,它具有常规命令、非批处理调用的性能优势。这就是为什么它可能不同于存储过程的“标准”方法 我想说,安全性并不是简单地验证输入的问题。看起来您使用它所做的只是将数据直接传输到表中,而不是运行任何自定义SQL 至于不止一次地运行它,我们在生产代码中使用它在多个地方、多次执行大数据操作—性能优势超过了您必须使用的略有不同的DAL代码
唯一的潜在问题是内存压力。如果您从一个对象图创建一个
DataTable
(我们所做的事情),您将在内存中获得该数据的第二个副本(albiet,short-live)。在某些地方,我们将代码从使用DataTable
更改为使用自定义类,该类在对象图(我说的是图形,通常是两个平面列表)上实现IDataReader
。这避免了内存压力。我认为您对这个选择没有意见。与标准的insert语句相比,它具有常规命令、非批处理调用的性能优势。这就是为什么它可能不同于存储过程的“标准”方法
我想说,安全性并不是简单地验证输入的问题。看起来您使用它所做的只是将数据直接传输到表中,而不是运行任何自定义SQL
至于不止一次地运行它,我们在生产代码中使用它在多个地方、多次执行大数据操作—性能优势超过了您必须使用的略有不同的DAL代码
唯一的潜在问题是内存压力。如果您从一个对象图创建一个
DataTable
(我们所做的事情),您将在内存中获得该数据的第二个副本(albiet,short-live)。在某些地方,我们将代码从使用DataTable
更改为使用自定义类,该类在对象图(我说的是图形,通常是两个平面列表)上实现IDataReader
。这避免了记忆压力。谢谢亚当-这正是我想要的。@Kurt没问题。我唯一能提出的建议就是以某种方式记录标准的差异。不幸的是,我们有大量毫无意义的代码段,并且打破了传统-但却被某个特定的人发现,这是为了性能/bug修复/黑客而做的,原因没有任何解释。谢谢Adam-这正是我要找的。@Kurt没问题。我唯一能提出的建议就是以某种方式记录标准的差异。不幸的是,我们有大量毫无意义的代码段,并且打破了传统——但却被某个特定的人发现,它是为了性能/bug修复/黑客而做的,而没有任何解释。