小编rya*_*man的帖子

我怎样才能让SqlBulkCopy告诉我哪一列有截断错误

我正在使用SqlBulkCopy从外部数据库导入。导入nvarchar列时,如果该列的大小不足以容纳传入的字符串,则它将失败并显示:

InvalidOperationException:无法将数据源中String类型的给定值转换为指定目标列的nvarchar类型。字符串或二进制数据将被截断。

我希望能够告诉用户哪个目标列出现了问题。我已经梳理了异常,但是在任何地方都看不到它。有没有一种方法可以进行设置,以使列的名称或索引在异常时返回?

这是批量复制的伪代码:

using (DbConnection source = DataTableProviderAssists.GetTypedDbConnection(package.ImportSourceType, package.UnencryptedConnectionString))
{
    using (DbCommand cmd = GetCommand(package, source))
    {
        source.Open();

        reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(RequestContext.ConnectionString, SqlBulkCopyOptions.TableLock))
        {
            bulkCopy.DestinationTableName = temporaryTableName;
            bulkCopy.BatchSize = 40000;
            bulkCopy.BulkCopyTimeout = 60000;

            foreach (ImportField field in package.Fields)
            {
                bulkCopy.ColumnMappings.Add(field.Name, field.Name);
            }

            bulkCopy.WriteToServer(reader);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c# sql-server

5
推荐指数
1
解决办法
2218
查看次数

标签 统计

c# ×1

sql-server ×1