gpt4 book ai didi

c# - 如何让 SqlBulkCopy 告诉我哪个列有截断错误

转载 作者:太空狗 更新时间:2023-10-29 23:35:04 25 4
gpt4 key购买 nike

我正在使用 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);
}
}
}

谢谢

最佳答案

我不确定有没有。
您可能需要以不同的方式解决这个问题。
尝试使用 Microsoft.SqlServer.Management.Smo API 查询目标表,并计算出表中列的最大长度。
一旦你有了这些,你就可以预读你的源数据,并立即触发异常。
玩得开心。

关于c# - 如何让 SqlBulkCopy 告诉我哪个列有截断错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com