概述
例子:
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必须与数据库中的列完全匹配(包括列数量及数据类型).
最后
以上就是繁荣镜子为你收集整理的C#批量插入数据SqlBulkCopy的全部内容,希望文章能够帮你解决C#批量插入数据SqlBulkCopy所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复