获取对数据库的请求以错误结束的行号
Get the line number on which the request to database ended with an error
我使用此代码发送 SQL 请求:
SqlBulkCopy bulkCopy = new SqlBulkCopy(Connection);
foreach (DataColumn column in dt.Columns)
{
bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
bulkCopy.DestinationTableName = "nsi." + classifierData.Info.TableName;
bulkCopy.WriteToServer(dt);
并得到这个异常:
Received an invalid column length from the bcp client for colid
有什么方法可以确定是哪一行导致了错误吗?
我试过使用它,但它不起作用(值总是相同的):
FieldInfo currentRow = typeof(SqlBulkCopy).GetField("_currentRowLength", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
var currentRowNumber = currentRow.GetValue(bulkCopy);
FieldInfo _rowsCopiedField = typeof(SqlBulkCopy).GetField("_rowsCopied", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
var currentRowN = _rowsCopiedField.GetValue(bulkCopy);
求求大家帮帮我...
我认为从纯粹的 SqlBulkCopy
中识别错误行的唯一方法是使用 NotifyAfter property + SqlRowsCopied 事件 + BatchSize = 1。
从这些,你现在可以很容易地得到一个 Index
属性,你为每个成功复制的行递增,你将能够找到错误的索引。
例如,抛出一个错误,你用 NotifyAfter = 1
重试
bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
bulkCopy.NotifyAfter = 1;
bulkCopy.BatchSize = 1;
显然,这不是最佳性能解决方案,但您会找到您的信息。
编辑:回复评论
Sorry, but can I get a value of row-column with error?
我不这么认为。我们不确切知道哪个列有错误消息的问题。
我使用此代码发送 SQL 请求:
SqlBulkCopy bulkCopy = new SqlBulkCopy(Connection);
foreach (DataColumn column in dt.Columns)
{
bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
bulkCopy.DestinationTableName = "nsi." + classifierData.Info.TableName;
bulkCopy.WriteToServer(dt);
并得到这个异常:
Received an invalid column length from the bcp client for colid
有什么方法可以确定是哪一行导致了错误吗?
我试过使用它,但它不起作用(值总是相同的):
FieldInfo currentRow = typeof(SqlBulkCopy).GetField("_currentRowLength", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
var currentRowNumber = currentRow.GetValue(bulkCopy);
FieldInfo _rowsCopiedField = typeof(SqlBulkCopy).GetField("_rowsCopied", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
var currentRowN = _rowsCopiedField.GetValue(bulkCopy);
求求大家帮帮我...
我认为从纯粹的 SqlBulkCopy
中识别错误行的唯一方法是使用 NotifyAfter property + SqlRowsCopied 事件 + BatchSize = 1。
从这些,你现在可以很容易地得到一个 Index
属性,你为每个成功复制的行递增,你将能够找到错误的索引。
例如,抛出一个错误,你用 NotifyAfter = 1
bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
bulkCopy.NotifyAfter = 1;
bulkCopy.BatchSize = 1;
显然,这不是最佳性能解决方案,但您会找到您的信息。
编辑:回复评论
Sorry, but can I get a value of row-column with error?
我不这么认为。我们不确切知道哪个列有错误消息的问题。