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

时间:2018-05-24 17:23:36

标签: c# sql-server reflection sqlbulkcopy

我使用此代码发送SQL请求:

 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);

并获得此例外:

  

从bcp客户端收到colid

的无效列长度

有没有办法确定哪一行导致错误?

我试图使用它,但它不起作用(值总是相同的):

odient

请帮帮我......

1 个答案:

答案 0 :(得分:1)

我认为从纯Index标识错误行的唯一方法是使用NotifyAfter属性+ SqlRowsCopied事件+ BatchSize = 1。

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

例如,抛出错误,您可以使用bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied); bulkCopy.NotifyAfter = 1; bulkCopy.BatchSize = 1;

重试
java -jar -Dapple.awt.UIElement="true" USERS/eclipse-project/projectname/target/myproject-1.0-SNAPSHOT.jar -h 

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

编辑:回答评论

  

抱歉,我是否可以获得有错误的row-column值?

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