• ベストアンサー

DataTableに入っているデータを全てinsertしたい!(C#)

はじめまして、okwebsamaです。 さっそく質問なのですが、 質問タイトルのままですが、DataTableに入っているデータを全てinsertしたいのです。 insert先のテーブルは、DataTableと同じ列名をもっています。 コード DataTable d; for(int i = 1; i <= d.Rows.Count; i++){ みたいな感じで作っていたんですが、ここから先が思いつきませんでした。 どなたかよろしくお願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

確認ですが、 ・使っているデータベースは何ですか?  (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;

okwebsama
質問者

お礼

結局SQLのINSERT文で一気にデータを送りました。 長いソースを書いて説明して頂き、今後の参考にしたいと思います。 ありがとうございます。

関連するQ&A