bulkinsertorupdateasync:从BCP客户端收到无效的列长度
因此,我正在运行以下代码:
await _internalDb.BulkInsertOrUpdateAsync(results, bulkConfig, (progress) =>
{
log.BulkUpsertProgress(progress);
});
我得到了以下例外:
Received an invalid column length from the bcp client for colid 4
现在我试图确定哪个列引起了此问题。因此,经过研究后,我遇到了这个网站: https://www.c-sharpcorner.com/blogs/received-invalid-column-column-length-from-bcp-client-for-for-volid-n1
现在我将上述代码包装到尝试捕获块:
try
{
await _internalDb.BulkInsertOrUpdateAsync(results, bulkConfig, (progress) =>
{
log.BulkUpsertProgress(progress);
});
}
catch (Exception ex)
{
string message = string.Empty;
if (ex.Message.Contains("Received an invalid column length from the bcp client for colid"))
{
string pattern = @"\d+";
Match match = Regex.Match(ex.Message.ToString(), pattern);
var index = Convert.ToInt32(match.Value) - 1;
FieldInfo fi = typeof(SqlBulkCopy).GetField("_sortedColumnMappings", BindingFlags.NonPublic | BindingFlags.Instance);
var sortedColumns = fi.GetValue(bulkcopy);
var items = (Object[])sortedColumns.GetType().GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sortedColumns);
FieldInfo itemdata = items[index].GetType().GetField("_metadata", BindingFlags.NonPublic | BindingFlags.Instance);
var metadata = itemdata.GetValue(items[index]);
var column = metadata.GetType().GetField("column", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata);
var length = metadata.GetType().GetField("length", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata);
message = (String.Format("Column: {0} contains data with a length greater than: {1}", column, length));
}
return message;
}
现在,我在这一点上停留的地方是如何更换块状副本。因此,我想做的是清楚地定义例外,并找出引起问题的列/值。任何帮助将不胜感激。
提前致谢
So I was running the following code:
await _internalDb.BulkInsertOrUpdateAsync(results, bulkConfig, (progress) =>
{
log.BulkUpsertProgress(progress);
});
And I got the following exception:
Received an invalid column length from the bcp client for colid 4
Now I am trying to determine what column is causing this problem. So after researching, I came across this site: https://www.c-sharpcorner.com/blogs/received-invalid-column-length-from-bcp-client-for-volid-n1
Now I wrapped the above code into a try catch block:
try
{
await _internalDb.BulkInsertOrUpdateAsync(results, bulkConfig, (progress) =>
{
log.BulkUpsertProgress(progress);
});
}
catch (Exception ex)
{
string message = string.Empty;
if (ex.Message.Contains("Received an invalid column length from the bcp client for colid"))
{
string pattern = @"\d+";
Match match = Regex.Match(ex.Message.ToString(), pattern);
var index = Convert.ToInt32(match.Value) - 1;
FieldInfo fi = typeof(SqlBulkCopy).GetField("_sortedColumnMappings", BindingFlags.NonPublic | BindingFlags.Instance);
var sortedColumns = fi.GetValue(bulkcopy);
var items = (Object[])sortedColumns.GetType().GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sortedColumns);
FieldInfo itemdata = items[index].GetType().GetField("_metadata", BindingFlags.NonPublic | BindingFlags.Instance);
var metadata = itemdata.GetValue(items[index]);
var column = metadata.GetType().GetField("column", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata);
var length = metadata.GetType().GetField("length", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata);
message = (String.Format("Column: {0} contains data with a length greater than: {1}", column, length));
}
return message;
}
Now, where I am stuck at this point is how to replace the BulkCopy. So what I would like to do is to clearly define the exception and find out what column/value is causing the problem. Any help is greatly appreciated.
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论