私はいくつかのレコードを持つDataTableを持っています。これらのレコードをすべてリモートデータベースに挿入したいと思います。それを行う最も簡単な方法は何でしょうか?ほとんどの人がDataTableの行を繰り返し処理し、レコードをレコードごとに挿入することを読んでいます。私は、リモートサーバーへの接続を1つだけ行い、一括挿入を行いたいと思います。出来ますか?私はC#とMySQLを使用しています。DataTableからすべてのレコードをリモートデータベースに挿入する
0
A
答えて
1
私はこの答えは手遅れであるかどうか知りませんかあなたはこのような何かを行うことができます
:)ません:
// assume you have a table with one column;
string commandText = "insert into t_test1 (myid) values (@tempid)";
using (MySqlConnection cn = new MySqlConnection(myConnectionString))
{
cn.Open();
using (MySqlCommand cmd = new MySqlCommand(commandText, cn))
{
cmd.UpdatedRowSource = UpdateRowSource.None;
cmd.Parameters.Add("?tempid", MySqlDbType.UInt32).SourceColumn = "tempid";
MySqlDataAdapter da = new MySqlDataAdapter();
da.InsertCommand = cmd;
// assume DataTable dt contains one column with name "tempid"
int records = da.Update(dt);
}
cn.Close();
}
2
ケマルTaskinの答えは、それがパフォーマンスに恐ろしいですエレガントなソリューションですが、大きなDataTableを使用します。
37500レコードのインサートで試したところ、15分以上かかりました。
一度に1つのレコードを挿入しているようです。
私は、1000レコードのMySQL挿入ステートメント文字列を生成し、そのデータが完成するまでループして、挿入時間を6秒に短縮したことがわかりました。 BULK LOADINGではなくCHUNK LOADINGです。誰かがより良い解決策を考え出すことができるなら、私に知らせてください。
public void writeToDBTable(DataTable dt)
{
MySqlConnection conn = new MySqlConnection(globalClass.connString);
conn.Open();
String sql = null;
String sqlStart = "insert into MyTable (run_id, model_id, start_frame,water_year, state_id, obligateCover, DTWoodyCover, perennialGrowth, clonalCover) values ";
Console.WriteLine("Write to DB - Start. Records to insert = {0}", dt.Rows.Count);
int x = 0;
foreach (DataRow row in dt.Rows)
{
x += 1;
if (x == 1)
{
sql = String.Format(@"({0},{1},{2},{3},{4},{5},{6},{7},{8})",
row["runId"],
row["modelId"],
row["startFrame"],
row["waterYear"],
row["currentFrame"],
row["obligateCover"],
row["DTWoodyCover"],
row["perennialGrowth"],
row["clonalCover"]
);
}
else
{
sql = String.Format(sql + @",({0},{1},{2},{3},{4},{5},{6},{7},{8})",
row["runId"],
row["modelId"],
row["startFrame"],
row["waterYear"],
row["currentFrame"],
row["obligateCover"],
row["DTWoodyCover"],
row["perennialGrowth"],
row["clonalCover"]
);
}
if (x == 1000)
{
try
{
sql = sqlStart + sql;
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Console.WriteLine("Write {0}", x);
x = 0;
}
catch (Exception ex)
{
Console.WriteLine(sql);
Console.WriteLine(ex.ToString());
}
}
}
// get any straglers
if (x > 0)
{
try
{
sql = sqlStart + sql;
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Console.WriteLine("Write {0}", x);
x = 0;
}
catch (Exception ex)
{
Console.WriteLine(sql);
Console.WriteLine(ex.ToString());
}
}
conn.Close();
Console.WriteLine("Write to DB - End.");
}
関連する問題
- 1. リモートデータベースのmysqlテーブルからレコードを挿入する
- 2. リモートデータベースからのトラック行の挿入
- 3. BULKをDataTableからDB2に挿入するときのエラー
- 4. リモートデータベースからUITableViewセルを入力する
- 5. DataTableからExcelシートにデータを挿入する
- 6. リモートデータベースからスピナーを挿入できません
- 7. C#を使用してDataTableからOracleにバルク挿入
- 8. mysqlテーブルにデータを挿入中にすべてのnullレコードを無視する
- 9. DataTableにデータセットを挿入
- 10. .NETデータテーブルからSybaseに何千ものレコードを挿入する
- 11. PHPからMySQLの無限レコードを挿入するには?
- 12. 大量のcsvファイルからテーブルにレコードを挿入する
- 13. マルチラインテーブルから複数のレコードをMySQLに挿入するPHP Javascript
- 14. SQL Serverの2つの差分ソースからレコードをレコードに挿入する
- 15. csvからmysqlにレコードを挿入するには?
- 16. 最後にmysqlのすべてのレコードを挿入する方法
- 17. すべてのレコードのフィールドに基づいてSQLを挿入します
- 18. データテーブルからレコードをリストに挿入する
- 19. xmlからデータベースにレコードを挿入する
- 20. データベースフィードのフィールドに「レコードを挿入する」
- 21. データベースにレコードを挿入するには
- 22. PHP複数のレコードを複数のレコードから挿入する場合
- 23. アクセスデータベースにレコードを挿入する
- 24. mysqlに100万レコードを挿入する
- 25. スタースキーマに直接レコードを挿入する
- 26. C#DataTableからのバルク挿入に最適な方法
- 27. VBAを使用してExcelからDB2データベースにレコードを挿入する方法
- 28. jQuery DataTableのチェックボックスですべてのレコードを取得
- 29. レコードのリストの間に新しいレコードを挿入する
- 30. データベースのすべてのフィールドを挿入せずに挿入できますか?
DataTableオブジェクトとリモートサーバーのテーブルの間に重複する行がありますか? – user957902
[この質問に受け入れられる回答](http://stackoverflow.com/questions/5022531/best-way-to-bulk-insert-from-a-c-sharp-datatable)にチェックを入れたい場合があります。 –