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 排除错误的数据 插入正确的数据

1.使用SqlBulkCopy插入数据的时候,很难保证数据全部正确,如果其中的一条出现错误,就会回滚,全部插入失败 在网上找到了下面的方法,测试好用 记录下, TableName :  要插入表的...
  • sun49842566
  • sun49842566
  • 2017年02月08日 08:32
  • 897

SqlBulkCopy批量插入DB,异常处理,某行出错,保证正确行可插入DB

App.config:         program.cs using System; using System.Collections.Generic; ...
  • yudehui
  • yudehui
  • 2014年08月17日 20:12
  • 1995

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// /// 使用SqlBulkCopy将DataTable中的数据批量...
  • wang4978
  • wang4978
  • 2012年07月26日 17:58
  • 5622

SqlBulkCopy的几点注意事项

原文:http://blog.163.com/xiong1000@126/blog/static/218930920107240184853/ SqlBulkCopy 非常好用这一点...
  • Sky___Ice
  • Sky___Ice
  • 2013年10月29日 18:03
  • 11364

sql存储过程insert 后的错误检查很重要。否则出错前台无法知道

insert CBC_PRecvGoodsOutDetail(Porder, InPorder, Code, InType, OutQty,              Price, PurPrice...
  • lyf_lyf
  • lyf_lyf
  • 2015年05月25日 18:49
  • 987

C#批量插入数据SqlBulkCopy

例子: SqlConnection sqlCon = new SqlConnection(sqlConStr); sqlCon.Open(); SqlTransaction sqlTran = sq...
  • whl632359961
  • whl632359961
  • 2016年06月01日 16:52
  • 734

SqlBulkCopy批量插入数据

SqlBulkCopy介绍          SqlBulkCopy是.NETFramework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其它数据源的数据有...
  • u010121883
  • u010121883
  • 2016年01月26日 18:06
  • 1367

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

C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据 /// /// SqlBulkCopy往数据库中批量插入数据 ///...
  • fuyifang
  • fuyifang
  • 2015年03月18日 23:24
  • 2633

Oracle数据库学习小结(三)---大数据批量插入bulkcopy

上篇文章中说到要跟大家聊聊bulkcopy这个的用法,今天我们就来了解一下这个用法。在之前我们写程序的时候如果遇到需要往数据库中插入数据你会怎么办?可能第一反应是加个循环一条一条插入呗,如果我们的数据...
  • u013058618
  • u013058618
  • 2016年05月26日 09:50
  • 4267

使用 SqlBulkCopy大批量插入数据到数据库

本博客主要记录自己的学习成长 如有雷同 请联系~
  • sc_xiaozhou
  • sc_xiaozhou
  • 2017年04月16日 14:51
  • 1195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#批量插入数据SqlBulkCopy
举报原因:
原因补充:

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