1

次のコードを使用して、MS SQL 2008 サーバーにデータを挿入しています。

//filter the data have only the latest values
DataTable table = GetFilteredTable(id, maxTime);

//upload these values
using (SqlBulkCopy blk = new SqlBulkCopy(con))
{
 blk.BulkCopyTimeout = 600;
 blk.DestinationTableName = tableName;
 blk.WriteToServer(table);
}

これらのテーブルは、エンタープライズ ミドルウェアによって SQL Server で作成されるため、スキーマ名にピリオドが含まれています。完全なテーブル名は[j.doe].[FOOBAR]、j.doe がスキーマ名で、FOOBAR が実際のテーブル名のようなものです。

上記のコードを実行すると、「宛先テーブルの列の順序情報を取得できません」という例外で失敗します。(サーバーにはフランス語のロケールがあり、例外もフランス語であるため、正確なエラー メッセージは添付しません。)

私のコードでは、変数の値tableName[j.doe].[FOOBAR]

エラーがテーブル名にあることを確認するために、別のスキーマに同じテーブルを作成しました。つまり[dbo].[FOOBAR]、このテーブルに挿入すると、同じコードが問題なく実行されます。

このテーブルに行を挿入するには、プログラムによる正しい方法を使用したいと思います。サーバー上のデータベースで新しいテーブルを変更または追加するのではなく、コードを変更する方法を提案してください。

スキーマ名にピリオドが含まれている場合、SqlBulkCopy を使用するにはどうすればよいですか?

4

0 に答える 0