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介绍          SqlBulkCopy是.NETFramework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其它数据源的数据有...

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

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// /// 使用SqlBulkCopy将DataTable中的数据批量...

ADO操控数据库SqlBulkCopy批量数据插入

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 在数据库导入过程中,如果小数...

SqlServer批量插入数据方法--SqlBulkCopy

SqlBulkCop

C# 使用SqlBulkCopy类批量复制大数据

特别注意  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); 插入的时候列的顺序...

使用asp.net 2.0中的SqlBulkCopy类批量复制数据

介绍: 在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用。 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据。 ASP.NET 2.0有一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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