質問: 1; i <= d.rows.count; i++){ みたいな感じで作っていたんですが、ここから先が思いつきませんでした。 どなたかよろしくお願いします!!
回答: 確認ですが、 ・使っているデータベースは何ですか? (sql server or oracle or access or その他?) ・dbの接続方法には、何を使ってますか? (sqlclient? oledb?) ・コピー元のdatasetは、型付dataset?型無しdataset? ・c# + asp.net でという話で宜しいでしょうか? (asp.netで質問されていますが、質問内容みると、c#という 分類での質問になり、asp.netではないような気がします) 少々情報が足りないので、回答が的外れになるかもしれませんが、 どのdb&接続方法にしても、名前空間とクラス名が違うだけで 基本ロジック自体は、ほぼ一緒のため、 下記、型付きdatasetで、sql serverの例で、サンプル記載しておきます。 もし、sql serverじゃない&型無しdatasetの場合だったり、 どう応用したらいいかわからないという場合は、また質問して下さい。 ############################################################# // コピー元のdatatableを取得 datatable d = コピー元datatableを取得; // データベースの接続 //(本来であれば、web.configやapp.configに設定されている接続先を取得する方法が望ましいわけで...) system.data.oledb.oledbconnection conn = new system.data.oledb.oledbconnection("provider=sqloledb.1;integrated security=sspi;persist security info=false;initial catalog=db名;data source=dbサーバのipアドレス"); conn.open(); // コピー元のデータ数分だけループ foreach (datarow row in d.rows) { // insert用sqlを生成 system.text.stringbuilder sql = new system.text.stringbuilder(); sql.append("insert into [コピー先のスキーマ].[コピー先テーブル名] "); // insert項目 system.text.stringbuilder insertcolumns = new system.text.stringbuilder(); // insert値 system.text.stringbuilder valuecolumns = new system.text.stringbuilder(); // datatableの列数分だけループ foreach (datacolumn col in d.columns) { insertcolumns.appendformat("{0},", col.columnname); // 列の型が文字列型の場合 if (col.datatype == typeof(string)) { valuecolumns.appendformat("'{0}',", row[col.columnname].tostring()); } else { // 列の型が文字列型以外の場合 valuecolumns.appendformat("{0},", row[col.columnname].tostring()); } } // 不要な「,」を削除 insertcolumns.remove(insertcolumns.length - 1, 1); valuecolumns.remove(valuecolumns.length - 1, 1); // insert用sql文の生成 sql.appendformat("({0}) values ({1})", insertcolumns.tostring(), valuecolumns.tostring()); // sqlの実行 system.data.oledb.oledbcommand command; command = new system.data.oledb.oledbcommand(sql.tostring(), conn); command.executenonquery(); command.dispose(); command = null; } // dbの接続を閉じる conn.close(); conn.dispose(); conn = null;