【问题标题】:SQL Server Bulk Insert failing when called from .NET SqlCommand从 .NET SqlCommand 调用时,SQL Server 批量插入失败
【发布时间】:2010-10-01 17:41:55
【问题描述】:

我有一个在 SQL Server 2005 数据库上进行批量插入的存储过程。 当我从一些 SQL 调用这个存储过程(传入本地格式文件和数据文件的名称)时,它工作正常。每次。

但是,当使用 SqlCommand.ExecuteNonQuery 从 C# .NET 3.5 代码调用相同的存储过程时,它会间歇性地工作。

当它失败时,会生成一个SqlException,说明:

无法批量加载。格式文件“c:\bulkinsert\MyFile.fmt”中的列号无效

我认为此错误消息不正确。

有没有人在从代码中调用批量插入时遇到过类似的问题?

谢谢。

【问题讨论】:

    标签: c# sql sql-server insert bulk


    【解决方案1】:

    您如何进行批量插入?通常,问题(在这种情况下)是“c:\”是服务器的“c:\”还是客户端的“c:\”。

    但是。在 C# 代码中,最简单的方法是使用 SqlBulkCopy。此类提供从托管代码对批量插入功能的直接访问,包括映射(尽管我从不打扰它们)。

    如果文件类似于 csv / tsv / 类似文件,那么强烈推荐使用CsvReader。这提供了WriteToServer 使用效率最高的IDataReader 接口。

    【讨论】:

      【解决方案2】:

      我认为问题出在格式文件上。 我不再使用格式文件,它现在似乎 100% 的工作。 我改为在 SQL 中指定字段和行终止符。

      Declare @Sql Nvarchar(2000); 
      
      SET @Sql = 
      'Bulk Insert TestOutputPretest
      From  ''c:\rawdata\bulkinsert\Segment1839204.dat''
       WITH 
            (
               FIELDTERMINATOR ='','',
               ROWTERMINATOR = ''\n''
            )'
      
      Exec sp_ExecuteSql @Sql;
      

      【讨论】:

        【解决方案3】:

        使用

        Exec sp_ExecuteSql @Sql;(100% 工作)

        exec(@sql) 不是很强大,因为它有一些限制

        【讨论】:

        • 请不要在您的帖子中添加签名。它们被认为是噪音,通常会被删除。
        猜你喜欢
        • 1970-01-01
        • 2016-01-09
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        相关资源
        最近更新 更多