您的位置:首页 > 数据库 > SQL

SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit

2017-04-26 08:06 3031 查看
使用SqlBulkCopy批量插入,可以快速对大批量的数量插入,性能非常好

在使用时出现“来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit”异常

为DataTable与要插入的数据表字段位置不一样所至

DataTable与要插入的数据表要字段名,位置,数据类型都一至才可

示例,使用使用SqlBulkCopy插入多个表

public bool BatchInsertUniqeCode(DataTable uniqueCodeProduceContrastDt,DataTable uniqueCodeGenerateDt)
{
using(SqlConnection conn= (SqlConnection)(base.DbContext.Database.Connection))
{
if (conn.State == ConnectionState.Closed) { conn.Open(); }
SqlTransaction tran = conn.BeginTransaction();
SqlBulkCopy upBlock = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran);
SqlBulkCopy ugBlock = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran);
try
{
ugBlock.DestinationTableName = "UniqueCodeGenerate";
ugBlock.BatchSize = uniqueCodeGenerateDt.Rows.Count;
if (uniqueCodeGenerateDt != null && uniqueCodeGenerateDt.Rows.Count > 0)
{
ugBlock.WriteToServer(uniqueCodeGenerateDt);
}
ugBlock.Close();

upBlock.DestinationTableName = "UniqueCodeProduceContrast";
upBlock.BatchSize = uniqueCodeProduceContrastDt.Rows.Count;
if (uniqueCodeProduceContrastDt != null && uniqueCodeProduceContrastDt.Rows.Count > 0)
{
upBlock.WriteToServer(uniqueCodeProduceContrastDt);
}
upBlock.Close();

tran.Commit();
return true;
}
catch(Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
upBlock.Close();
ugBlock.Close();
conn.Close();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: