我正在使用SqlBulkCopy從外部數據庫導入。當導入到nvarchar列時,如果該列不夠大以容納傳入字符串,則該列失敗:如何獲取SqlBulkCopy來告訴我哪個列有截斷錯誤
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);
}
}
}
感謝
在這一點上,我會說你是對的。我處於ETL導入的上下文中,所以我不想在正常情況下放慢速度。所以,我最終選擇了「預覽模式」,可以慢慢導入,我可以自己進行驗證。 – ryanman 2010-07-21 17:10:21