Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取对数据库的请求以错误结束的行号_C#_Sql Server_Reflection_Sqlbulkcopy - Fatal编程技术网

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

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

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

请帮助我,任何人…

我认为从纯SqlBulkCopy中识别错误行的唯一方法是使用属性+event+BatchSize=1

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

例如,将抛出一个错误,然后使用NotifyAfter=1重新尝试

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

编辑:回答评论


很抱歉,我可以获取有错误的行-列的值吗


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

现在可能重复,在这个问题中,查找列号…@b_stil提供了一种查找导致错误的数据的方法。。。只按栏,不按行谢谢你的回答。但它总是为任何请求设置一个值。我不理解您上一次评论的含义。对不起,我忘了您还需要将批量大小设置为1。如前所述,这不会像正常情况下那么快,但至少您会发现该行有错误。对不起,我可以获得一个有错误的row-column值吗?
bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
bulkCopy.NotifyAfter = 1;
bulkCopy.BatchSize = 1;