3

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

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

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

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

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

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

谢谢。

4

3 回答 3

1

你怎么做批量插入?通常,问题(在这种情况下)是“c:\”是服务器的“c:\”还是客户端的“c:\”。

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

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

于 2009-01-16T07:30:46.180 回答
0

I think the problem was todo with the format file. I am no longer using the format file and it seems to work 100% of the time now. I specify field and row terminators in the SQL instead.

Declare @Sql Nvarchar(2000); 

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

Exec sp_ExecuteSql @Sql;
于 2009-01-19T02:49:32.180 回答
0

利用

Exec sp_ExecuteSql @Sql;(100% 工作)

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

于 2011-11-18T17:42:40.467 回答