尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException

Posted

技术标签:

【中文标题】尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException【英文标题】:InvalidOperationException while trying bulkInsert the datatable into SQL Server 【发布时间】:2018-01-16 01:14:27 【问题描述】:

我从文本文件中获取数据到数据表中,现在当我尝试将该数据插入 SQL Server 2008 数据库时,出现以下错误:

InvalidOperationException:字符串或二进制数据将被截断

我无法获取错误的来源,即哪个记录引发了此错误。

代码如下

for (int i = 0; i < dt.Columns.Count; i++)

    if (i == 159)
    
    
    bulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName,DestTable.Columns[i].ColumnName);


bulkCopy.BulkCopyTimeout = 600;
bulkCopy.DestinationTableName = "dbo.TxtFileInfo";
bulkCopy.WriteToServer(dt);

我在dt 变量中有数据表。并为从文本文件创建的数据表和在数据库中创建的空表添加匹配的列。

我已使用以下代码将文本文件中的所有记录复制到数据表中。

while (reader.Read())

      int count1 = reader.FieldCount;

      for (int i = 0; i < count1; i++)
      
          string value = reader[i].ToString();                            
          list.Add(value);
      

      dt.Rows.Add(list.ToArray());
      list.Clear();

我从文本文件中得到了正确的记录。列数也相等。我的数据库表TextToTable 具有数据类型为nvarchar(50) 的所有列,并且我正在从文本文件中以字符串的形式获取每条记录。但是在批量插入期间显示的错误是

无法将字符串转换为 nvarchar(50)

【问题讨论】:

Share you Table strucutre....似乎您正在尝试在 DB 中插入长度较短的数据(例如:您的数据长度为 20 但在 DB 中仅接受 10 ) 在我的表中,每一列的数据类型都是 nvarchar(50)。 然后检查来自文本文件的数据。有 if 条件来检查代码中的数据长度并有断点进行故障排除。 @Prathyush 是的,我有一些超过 50 个字符的数据。这个问题的解决方案是什么。。我需要更改数据库表数据类型还是什么。。 不,只需增加数据库中列的长度,或者如果没有业务影响,则修剪您的数据并保存。电话是你的 【参考方案1】:

您似乎正在尝试在 DB 中插入长度较短的数据(例如:您的数据长度为 20 但在 DB 中仅接受 10 )

检查来自文本文件的数据。有 if 条件来检查代码中的数据长度并有断点来排除故障。

如果是,则增加 DB 中列的长度。

alter tablename
alter column columnname varchar(xxx)

【讨论】:

以上是关于尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 MS SQL Server 中批量插入时出现“XML 解析:第 2 行,字符 0,文档语法不正确”

将 HTML 插入 SQL Server 时出现 SQL 异常

将数据批量加载到使用 BCP 从 SQL Server 导出的 Snowflake 时出现 UTF-8 错误

尝试使用多个值插入 SQL Server 时出现不正确的语法错误

在 TransactionScope 中批量插入时出现 ORA-00604 错误

从 Azure Blob 存储批量插入时出现 ERRORFILE 问题