C#批量插入数据SqlBulkCopy

原创 2016年06月01日 16:52:07
例子:
SqlConnection sqlCon = new SqlConnection(sqlConStr);
sqlCon.Open();
SqlTransaction sqlTran = sqlCon.BeginTransaction(); // 开始事务
SqlBulkCopy sqlBC = new SqlBulkCopy(sqlCon, SqlBulkCopyOptions.Default, sqlTran);
sqlBC.DestinationTableName = "SaleInfo";
sqlBC.BatchSize = 1;

DataTable dtSale = new DataTable();
dtSale.Columns.Add("SaleID", typeof(Int32));
dtSale.Columns.Add("SaleDate",typeof(DateTime));
dtSale.Columns.Add("SaleDep");
dtSale.Columns.Add("Operator");
dtSale.Columns.Add("CusID", typeof(Int32));
dtSale.Columns.Add("SaleServerTime");

DataRow sqlRow = dtSale.NewRow();
sqlRow["SaleID"] = 700;
sqlRow["SaleDate"] = DateTime.Today;
sqlRow["SaleDep"] = "管理部";
sqlRow["Operator"] = "system";
sqlRow["CusID"] = 780;
sqlRow["SaleServerTime"] = "";
dtSale.Rows.Add(sqlRow);

try
{
sqlBC.WriteToServer(dtSale); //此处报错
sqlTran.Commit();

}
catch (Exception)
{
sqlTran.Rollback();
throw;
}
finally
{
sqlBC.Close();
sqlCon.Close();
}
Close();

报错内容:来自数据源的 String 类型的给定值不能转换为指定目标列的类型 smalldatetime。
表结构说明:

CREATE TABLE [SaleInfo] (
[SaleID] [int] NOT NULL ,
[HWSaleID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[SaleDate] [smalldatetime] NULL ,
[SaleDep] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Operator] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[CusID] [int] NULL ,
[ReturnMoney] [real] NULL ,
[SaleServerTime] [varchar] (9) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_SaleInfo] PRIMARY KEY  CLUSTERED 
(
[SaleID]
)  ON [PRIMARY] 
) ON [PRIMARY]

解答:

查看表结构后发现C#代码中Columns中少了[HWSaleID]
和[ReturnMoney] (程序中没用到),数据库中删除了这2列后程序正常了。

结论:SqlBulkCopy
提交数据不同于Insert语句,DataTable.Columns必须与数据库中的列完全匹配(包括列数量及数据类型).

版权声明:本文为博主原创文章,未经博主允许不得转载。

批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚

默认情况下,批量复制操作作为独立的操作执行。 批量复制操作以非事务性方式发生,不可能使其回滚。 如果需要在出错时回滚全部批量复制或它的一部分,可以使用 SqlBulkCopy 托管的事务,在现有事务中...

C#大数据批量增加到数据库

代码如下: static void WriteToDatabase(DataTable dt) { string connString = "Data Sour...
  • WuLex
  • WuLex
  • 2016年07月13日 23:03
  • 2309

SqlBulkCopy 实现原汁原味复制的注意事项

1. SqlBulkCopyOptions.KeepIdentity  必须设置!
  • yenange
  • yenange
  • 2014年06月29日 22:23
  • 6342

C# SqlBulkCopy类大批量数据存入数据库

最近因为要做数据性能优化,原有的数据通过foreach循环插入数据库,由于每循环一次就要和数据库交互一次,性能非常差,用时很长,在网上查阅了一些资料找到了SqlBulkCopy这个类,在原有的数据基础...

C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据

C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据 /// /// SqlBulkCopy往数据库中批量插入数据 ///...

C#批量数据处理SqlBulkCopy

1.什么是SqlbulkCopy,解决的问题 在程序处理中经常会遇见大数据量的批量操作,比如我们要把一个文本格式的数据批量插入数据库。如果按照传统的逻辑只会将从文件中独处的数据轮询的方式一条一条的...
  • Scalzdp
  • Scalzdp
  • 2014年06月11日 15:32
  • 3614

批量插入数据 C# SqlBulkCopy使用

转自:http://blog.csdn.net/wangzh300/article/details/7382506 private static void DataTable...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

批量插入数据 C# SqlBulkCopy使用

[csharp] view plaincopy private static void DataTableToSQLServer( DataTable dt)   {       str...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#批量插入数据SqlBulkCopy
举报原因:
原因补充:

(最多只允许输入30个字)