为了账号安全,请及时绑定邮箱和手机立即绑定

获取对数据库的请求以错误结束的行号

获取对数据库的请求以错误结束的行号

C#
一只名叫tom的猫 2021-06-30 11:12:59
我使用此代码发送 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);并得到这个例外:从 bcp 客户端收到一个无效的列长度,用于 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);请帮助我任何人...
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

我相信纯粹识别错误行的唯一方法SqlBulkCopy是使用NotifyAfter属性 + SqlRowsCopied事件 + BatchSize = 1。


从这些中,您现在可以轻松拥有一个Index属性,您可以为每个成功复制的行增加该属性,并且您将能够找到错误的索引。


例如,抛出一个错误,你重试 NotifyAfter = 1


bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);

bulkCopy.NotifyAfter = 1;

bulkCopy.BatchSize = 1;

显然,这不是最佳性能明智的解决方案,但您会找到您的信息。


编辑:回答评论


抱歉,但是我可以得到一个有错误的行列值吗?


我不这么认为。我们不确切知道哪一列有错误消息的问题。


查看完整回答
反对 回复 2021-07-03
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信