最近论坛里面经常有人问到这个问题,刚好我的项目也用到这个功能,从网上收集了一些资料,也整理了下!供大家参考!
两种方式:
1,SqlBulkCopy 类
使您可以用其他源的数据有效批量加载 SQL Server 表。
属性:
名称 说明
BatchSize 每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。
BulkCopyTimeout 超时之前操作完成所允许的秒数。
ColumnMappings 返回 SqlBulkCopyColumnMapping 项的集合。列映射定义数据源中的列和目标表中 的列之间的关系。
NotifyAfter 定义在生成通知事件之前要处理的行数。
DestinationTableName 服务器上目标表的名称。
方法:
WriteToServer 已重载. 将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。
重载列表:
名称 说明
WriteToServer(array<DataRow>[]()[]) 将所提供的 DataRow 数组中的所有行复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。
WriteToServer(DataTable) 将所提供的 DataTable 中的所有行复制到 SqlBulkCopy 对 象的 DestinationTableName 属性指定的目标表中。
WriteToServer(IDataReader) 将所提供的 IDataReader 中的所有行复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表中。
WriteToServer(DataTable,DataRowState) 只将与所提供 DataTable 中所提供行状态匹配的行复制 到SqlBulkCopy 对象的 DestinationTableName 属性
指定的目标表中。
##IDataReader 接口:: 提供一种方法来读取一个或多个通过在数据源执行命令所获得的只进结果集流,这是由访问关系数据库的 .NET Framework 数据提供程序实现的。
使用IDataReader 和 IDataRecord 接口可以通过继承类实现 DataReader 类,该类提供一种读取结果集的一个或多个只进流的方法
。
SqlBulkCopy..::.ColumnMappings 属性
类型:System.Data.SqlClient..::.SqlBulkCopyColumnMappingCollection
列映射集合。默认情况下为空集合。
如果数据源和目标表具有相同的列数,并且数据源中每个源列的序号位置匹配相应目标列的序号位置,则无需 ColumnMappings 集合。但是如果列计数不同,或序号位置不一致,则必须使用 ColumnMappings,以确保将数据复制到正确的列中。
在执行批量复制操作期间,可以访问此集合,但不能进行更改。任何更改尝试都将引发 InvalidOperationException。
SqlDataReader 类
提供一种从 SQL Server 数据库读取行的只进流的方式。无法继承此类。
若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。
方法:
//GetName 获取指定列的名称。
//Read 使 SqlDataReader 前进到下一条记录。
应网友要求,再增加一个批量更新的方法,其实跟批量插入差不多,批量删除我就不行了,举一返三!