C# 获取对数据库的请求以错误结束的行号
我使用以下代码发送SQL请求:C# 获取对数据库的请求以错误结束的行号,c#,sql-server,reflection,sqlbulkcopy,C#,Sql Server,Reflection,Sqlbulkcopy,我使用以下代码发送SQL请求: SqlBulkCopy bulkCopy = new SqlBulkCopy(Connection); foreach (DataColumn column in dt.Columns) { bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName); } bulkCopy.DestinationTableName = "nsi." + classifierData.I
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);
请帮助我,任何人…我认为从纯SqlBulkCopy中识别错误行的唯一方法是使用属性+event+BatchSize=1 通过这些,您现在可以轻松地拥有一个索引属性,您可以为每个成功复制的行递增该属性,并且您将能够找到错误的索引 例如,将抛出一个错误,然后使用NotifyAfter=1重新尝试 显然,这不是最好的性能解决方案,但您会找到您的信息 编辑:回答评论
很抱歉,我可以获取有错误的行-列的值吗
我不这么认为。我们不知道哪一列的错误消息有问题。现在可能重复,在这个问题中,查找列号…@b_stil提供了一种查找导致错误的数据的方法。。。只按栏,不按行谢谢你的回答。但它总是为任何请求设置一个值。我不理解您上一次评论的含义。对不起,我忘了您还需要将批量大小设置为1。如前所述,这不会像正常情况下那么快,但至少您会发现该行有错误。对不起,我可以获得一个有错误的row-column值吗?
bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
bulkCopy.NotifyAfter = 1;
bulkCopy.BatchSize = 1;