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

使用する

Exec sp_ExecuteSql @Sql;(100%稼働)

exec(@sql)いくつかの制限があるため、あまり強力ではありません

于 2011-11-18T17:42:40.467 に答える
0

問題は、フォーマットファイルの扱いにあったと思います。フォーマット ファイルはもう使用していませんが、現在は 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;
于 2009-01-19T02:49:32.180 に答える