我有一个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分钟。
它似乎一次插入一条记录。
我发现如果我生成一个包含1000条记录的MySQL插入语句字符串并循环数据直到完成,我的插入时间减少到6秒。它不是庞大的装载,它的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. 插入记录到Msaccess数据库
- 3. C#插入记录到数据库表
- 4. 从数据库Feed的“插入”记录到字段中
- 5. 如何显示从数据库表中的所有记录行插入表
- 6. PHP插入记录到MySQL数据库(多记录被添加)
- 7. 向数据库插入新记录覆盖现有记录C#
- 8. 从Oracle数据库插入缺少的记录到SQL Server数据库中
- 9. 从Delphi远程插入到远程MySQL数据库的速度非常慢
- 10. 插入记录的最佳数据库
- 11. 插入到另一个数据库只插入1条记录
- 12. 从数据库的所有表中删除所有记录
- 13. 从Csv文件插入记录到数据库表(SQL Server)
- 14. 从哈希表中插入记录到数据库中
- 15. 只有一条记录从datagridview插入Oracle数据库
- 16. 如何在所有记录插入到数据库后显示警报消息
- 17. MySQL PHP没有插入所有的数据到数据库
- 18. 如何从ip + phone插入数据到远程数据库应用程序
- 19. 从JTable到数据库插入记录的不同方式或有效方法
- 20. 插入数据表记录到MySQL数据库使用PHP
- 21. 插入从一个数据库到另一个数据库中的所有表
- 22. 从数据库获取所有记录到Vaadin表
- 23. 有插入到数据库
- 24. Laravel没有将所有数据插入到数据库
- 25. 拦截/记录从.Net程序集到SQL Server的所有数据库调用
- 26. 从数据库到数组的记录
- 27. SPARQL - 从远程端点插入数据
- 28. ruby Datamapper没有插入所有记录
- 29. 只将csv中的重复记录插入到数据库中
- 30. 新记录插入到数据库表在我的情况
DataTable对象和远程服务器上的表之间是否存在重复行? – user957902 2012-04-06 21:07:33
你可能想检查[接受的回答这个问题](http://stackoverflow.com/questions/5022531/best-way-to-bulk-insert-from-a-c-sharp-datatable) – 2012-04-06 21:40:09