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

Posted 风清云淡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit相关的知识,希望对你有一定的参考价值。

使用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();
                }

            }

        }

 

以上是关于SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit的主要内容,如果未能解决你的问题,请参考以下文章

来自 List<> 的 SqlBulkCopy

SQL Server 2008 R2 的可重试 SQLBulkCopy

使用 SQLBulkCopy 插入/更新数据库

使用 SqlBulkCopy 在不同源之间传输数据

使用 SqlBulkCopy 插入数据时出错

使用 SqlBulkCopy 连接到 SQLite 数据库