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

我使用此代码发送 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);

请帮助我任何人...


一只名叫tom的猫
浏览 105回答 1
1回答

UYOU

我相信纯粹识别错误行的唯一方法SqlBulkCopy是使用NotifyAfter属性 + SqlRowsCopied事件 + BatchSize = 1。从这些中,您现在可以轻松拥有一个Index属性,您可以为每个成功复制的行增加该属性,并且您将能够找到错误的索引。例如,抛出一个错误,你重试 NotifyAfter = 1bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);bulkCopy.NotifyAfter = 1;bulkCopy.BatchSize = 1;显然,这不是最佳性能明智的解决方案,但您会找到您的信息。编辑:回答评论抱歉,但是我可以得到一个有错误的行列值吗?我不这么认为。我们不确切知道哪一列有错误消息的问题。
打开App,查看更多内容
随时随地看视频慕课网APP