我正在使用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)
谢谢
我不确定是否存在。
您可能需要以不同的方式解决这个问题。
尝试使用 Microsoft.SqlServer.Management.Smo API 查询目标表,并找出表中列的最大长度是多少。
一旦有了这些,您就可以预先读取源数据,并立即触发异常。
玩得开心。
| 归档时间: |
|
| 查看次数: |
2218 次 |
| 最近记录: |