|
分類:[C#]
お世話になっております。
.NetFramework2.0で提供されているクラスを使って、SQLServerのAテーブルの内容をAccessMDB Aテーブルへインサートしたいと考えております。
Aテーブルは仕様変更が多いため、カラム数を意識しない方法で行いたいと思っております。 (変更がある場合はSQL側が最新でMDB側が古い。)
OleDbCommandオブジェクトからOleDbDataAdapterオブジェクトを生成し、Fillメソッドでデータを追加すると、
AccessMDB側のAテーブルがSQL側の仕様に合わせられるのですが、 (MDBのカラム数が少なければ新たに追加される)
SQL側のAテーブルにカラムが追加となった場合、VALUES句にソースの追加作業が走るかと思います。 → SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand("SELECT * FROM A", connection); DataTable dataTable = new DataTable(); adapter.Fill(dataTable);
foreach (DataRow dr in dataTable.Rows) { strCmd = "INSERT INTO A VALUES ( " + dr[0] + ", '" + dr[1] + "', '" + dr[2] + ")"; //↑SQLServer側Aテーブルの仕様に合わせてdr[x]の追記が必要。
Aテーブルのスキーマ変更(カラム追加)に関わらず、ソースに手をいれなくてもいいような作りがあれば、
ご教授願えれば幸いです。
※最悪は、毎回ドロップ後SELECT INTOでテーブルを意識せずに作成しつつデータコピーしようと考えています。
OPENDATASOURCEをクエリに交えて実行するのかな、と思っておりますが具体的に分かりかねます。
こちらの方も、実装方法を御存じの方がおられましたら、ご教授頂けると幸いです。
SQLサーバへはWindows認証のため次のようなコネクションストリングを考えております。
"Initial Catalog= A;Data Source=(local);Integrated Security=SSPI;"
--- VS2010 .NetFramework2.0
|