null 許容列が含まれている場合、SqlBulkCopy を使用すると問題が発生します。SqlBulkCopy は null 許容列の処理方法を認識しておらず、長さゼロの列に遭遇すると不正なサイズ エラーをスローするようです。エラーは「bcp クライアントから無効な列の長さを受け取りました...」です。
これに対処するためのベストプラクティスは何だろうと思っています。これは、この問題と csv ファイルを読み取るための解決方法を説明する良いフォーラム投稿のようです。
私の状況はかなり典型的で単純だと思います。あるデータベース テーブルから別のデータベースに未知の量のデータを移動する必要があります。私にとってより簡単な答えは、SQL Server で SSIS/DTS またはリンクされたサーバーを使用することですが、顧客はアプリでデータ移動を行うことを望んでいます。
これに対する既知の回避策や、null 許容フィールドを持つデータを移動するためのより良いストリーミング ソリューションはありますか?
//access db
string src_db = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SourceDB.mdb;Jet OLEDB ";
//sql db
string dest_db = @"Data Source=.\TEST;Initial Catalog=testdb;User Id=user;Password=password;";
string sql = "";
OleDbConnection sdb = new OleDbConnection( src_db );
OleDbCommand cmd = new OleDbCommand( sql, sdb );
OleDbDataReader rs = null;
SqlConnection db = new SqlConnection( dest_db );
SqlCommand clear = null;
SqlBulkCopy bulk_load = null;
// Read in the source table
sql = "select * from someTable";
sdb.Open();
cmd = new OleDbCommand( sql, sdb );
rs = cmd.ExecuteReader();
// Import into the destination table
bulk_load = new SqlBulkCopy( db );
bulk_load.DestinationTableName = "test";
bulk_load.WriteToServer( rs );