c#中往mysql里批量插入上万条数据,有比较高效的方法吗?谢谢 对于mysql用事务操作,一次性插入,效率明显提升。cmd.CommandText="sql语句";cmd.ExeucteNonQuery();反复执行上面2句,连接不要关。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得LINQ插入可能会高效一点如果不考虑并发,倒是可以多线程LNGQ最后检测完整性,遗漏通过自设自增字段就能检查到,补上就好 BULK INSERT (Transact-SQL) :http://technet.microsoft.com/zh-cn/library/ms188365(v=sql.90).aspx mysql效率好像大数据量咋都不行,你写进去了……读也是很慢的……上万条 谢谢,我现在用了事务以及批量语句,刚才一次性插入10000多数据感觉挺快的,但是小弟又遇到个问题,c#中有什么函数或者什么办法知道数据插入的耗了多长时间吗?我现在form程序执行插入后,我立即进入mysql就看到数据插入成功了。如果我不手动进入mysql,怎么样才知道插入已经完成?最好能有个插入成功后的通知事件?谢谢!!!! 既然没有抛出异常,你怎么知道没有成功?另外,每当执行1000条DBCommand就提交(Commit)事务,然后再次开启事务,这样比较好。把过多的命令放在一个事务中,一旦超过物理内存分配限制,你的程序会变得很慢很慢。 谢谢!!我现在主要是form界面有个search按钮,每当点下后,如果数据不存在后台线程就会自动联网读取数据保存到数据库中,再执行搜索功能。所以我希望能在几万条数据成功插入之后得到通知,我再执行搜索。我的上万条数据,我用了mysql的批量插入语句,类似 insert into table1(id,name,email...)values(1,'a','[email protected]'),(2,'b',''...)所以尽管一共几万数据,我做了一些分类,一共估计也就是100个insert语句。 谢谢,我采用了bulk格式的mysql查询语句,另外加入了事务,在本机上运行起来很快,多得话一次性插入3--5万条,少的话1万条左右,感觉不到在占用时间。我是c#代码是/// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary>sql2000数据库 /// <param name="SQLStringList">多条SQL语句</param> public static void ExecuteSqlTran(List<string> SQLStringList) { using (MySqlConnection conn = new MySqlConnection(MySqlHelper.ConnStr)) { conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; MySqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } if (n > 0 && (n % 500 == 0 || n == SQLStringList.Count - 1)) { tx.Commit(); tx = conn.BeginTransaction();//原本是直接下面统一提交,听从sp1234的意见,就在这里重启事务,不知道这样写会不会/好,不过我这些写运行起来好像没问题。 } } //tx.Commit(); } catch (System.Data.SqlClient.SqlException E) { tx.Rollback(); throw new Exception(E.Message); } } }谢谢大家 解决方法写成博客了,欢迎指点http://blog.csdn.net/wwwww112233/article/details/8562630 c#如何获取子控件在父容器的位置 定义了一个datatable结构,其中有dateTime类型的,现通过程序赋空值,怎么办?用null好象不行. 怎么测试一个网站的性能? 报表问题,把一列数据做为列名,内详 这句有错吗,错在哪里 客户端向服务器端发送大于8k的数据,服务器不能接收全,怎样解决,是在同步形式下 how to use java language conversion asisstant 2.0 WebBrowser 老孟帮忙看看. 运行水晶报表提示登录失败,如何解决? C#如何将图片转换为字符串再转回来? 类似微博和QQ空间的在线编辑器 C# UDP 异步接收消息
如果不考虑并发,倒是可以多线程LNGQ
最后检测完整性,遗漏通过自设自增字段就能检查到,补上就好
我现在form程序执行插入后,我立即进入mysql就看到数据插入成功了。如果我不手动进入mysql,怎么样才知道插入已经完成?
最好能有个插入成功后的通知事件?谢谢!!!!
谢谢!!
我现在主要是form界面有个search按钮,每当点下后,如果数据不存在后台线程就会自动联网读取数据保存到数据库中,再执行搜索功能。所以我希望能在几万条数据成功插入之后得到通知,我再执行搜索。
我的上万条数据,我用了mysql的批量插入语句,类似 insert into table1(id,name,email...)values(1,'a','[email protected]'),(2,'b',''...)
所以尽管一共几万数据,我做了一些分类,一共估计也就是100个insert语句。
我是c#代码是
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>sql2000数据库
/// <param name="SQLStringList">多条SQL语句</param>
public static void ExecuteSqlTran(List<string> SQLStringList)
{
using (MySqlConnection conn = new MySqlConnection(MySqlHelper.ConnStr))
{
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
MySqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
if (n > 0 && (n % 500 == 0 || n == SQLStringList.Count - 1))
{
tx.Commit();
tx = conn.BeginTransaction();
//原本是直接下面统一提交,听从sp1234的意见,就在这里重启事务,不知道这样写会不会/好,不过我这些写运行起来好像没问题。
}
}
//tx.Commit();
}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
throw new Exception(E.Message);
}
}
}
谢谢大家
http://blog.csdn.net/wwwww112233/article/details/8562630