SqlBulkCopy 是个好对象
2013-04-08 11:17
295 查看
SqlBulkCopy是专门用作大数据的导入的, 相比单条的Insert看起来要爽的多. 据说能相差几十倍的性能差距(我们稍后自己做一下测试)
微软关于SqlBulkCopy给出的信息如下
Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。 使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
具体可参考(http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlbulkcopy(v=vs.80).aspx)
SqlBulkCopy.WriteToServer 方法有一下重载:
我们如果使用此方式添加自己的ORM插入逻辑岂不是一件很爽的事情. 从接口上看可以提供IDataReader方式或者DataTable, DataRow. 我们做的只是要将我们对象适配到这些对象上去就好了. 具体选择哪种方式去做呢?
方式一: DataTable, DataRow的方式是通过反射将所对象上的所有属性都塞到DataTable, DataRow中. 然后传递给SqlBulkCopy.WriteToServer方法.
方式二: 适配层实现IDataReader接口, 然后根据需要将具体的属性反射出来. (为何是根据需要才反射呢? 具体看参考一下IDataReader接口上的object GetValue(int i)方法)
显然方式二更好些.
具体的代码直接下载着看吧. http://files.cnblogs.com/cuiweifu/OrmForSqlBulkCopy.zip 我就不放这里挺碍眼的.
在我的机器上的测试结果如下.
微软关于SqlBulkCopy给出的信息如下
Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。 使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
具体可参考(http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlbulkcopy(v=vs.80).aspx)
SqlBulkCopy.WriteToServer 方法有一下重载:
名称 | 说明 |
---|---|
SqlBulkCopy.WriteToServer (DataRow[]) | 将所提供的 DataRow 数组中的所有行复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。 |
SqlBulkCopy.WriteToServer (DataTable) | 将所提供的 DataTable 中的所有行复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。 |
SqlBulkCopy.WriteToServer (IDataReader) | 将所提供的 IDataReader 中的所有行复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。 |
SqlBulkCopy.WriteToServer (DataTable, DataRowState) | 只将与所提供 DataTable 中所提供行状态匹配的行复制到 SqlBulkCopy 对象的DestinationTableName 属性指定的目标表中。 |
方式一: DataTable, DataRow的方式是通过反射将所对象上的所有属性都塞到DataTable, DataRow中. 然后传递给SqlBulkCopy.WriteToServer方法.
方式二: 适配层实现IDataReader接口, 然后根据需要将具体的属性反射出来. (为何是根据需要才反射呢? 具体看参考一下IDataReader接口上的object GetValue(int i)方法)
显然方式二更好些.
具体的代码直接下载着看吧. http://files.cnblogs.com/cuiweifu/OrmForSqlBulkCopy.zip 我就不放这里挺碍眼的.
在我的机器上的测试结果如下.
相关文章推荐
- 使用SqlBulkCopy对象进行大容量复制数据出现Datardader已经存在的错误的解决方法
- SqlBulkCopy 是个好对象(转)
- 数据迁移之SqlBulkCopy对象(一)
- ADO.NET 2.0 - 读者询问能否使用 SqlBulkCopy 对象来大量复制文字文件
- SqlBulkCopy对象和SqlDataApter的Update方法
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- ADO.NET 2.0 - 读者询问能否使用 SqlBulkCopy 对象来大量复制文字文件
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- SqlBulkCopy 是个好对象
- 将dataTable一次性插入数据库的几种方法(SqlBulkCopy或存储过程)
- 使用 SqlBulkCopy 大量复制文字文件之 C# 程序代码
- 利用SqlBulkCopy实现网上答题系统
- c# 的导入功能SqlBulkCopy
- ASP.NET的SqlBulkCopy用法
- ASP.NET之SqlBulkCopy
- 批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
- SQLBulkCopy使用
- net2.0中使用SqlBulkCopy进行大批量数据迁移
- 利用SqlBulkCopy快速大批量导入数据(SqlBulkCopy强大)
- .net 使用SqlBulkCopy极速插入数据到 SQL Server