关于用C#在MySQL中大量插入数据的问题速度超慢不知道为什么.......

lx4587 2005-10-24 11:22:03
用.net连接MySql后,两种驱动均使用(odbc和for .net)可是大量插入数据时速度非常之慢,和同等条件下的Access来比慢了将近5倍,这是为什么,起初我以为是odbc接口的问题,可是我把 Access的接口由oledb改为odbc测试一下仍然比MySql要快5倍!!!!
其实我所要插入的数据量并不大,几千条而已,可是为什么速度竟然到达分钟级别?那位大哥可以帮忙解释????急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
插入方法我也用了两种比较1.循环插入2;update插入,可是并没有什么改观什么原因???
以下是我其中一种别插入方法的代码:
private void DataBaseInsert()
{
System.Data.Odbc.OdbcConnection cn =new System.Data.Odbc.OdbcConnection(this.strCnOdbc);

string strSql ="insert into test.sima values (?,?,?,?)";
System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(strSql,cn);
System.Data.Odbc.OdbcParameterCollection pc = cmd.Parameters;
pc.Add("id",System.Data.Odbc.OdbcType.Int,4);
pc.Add("ox",System.Data.Odbc.OdbcType.Double,8);
pc.Add("oy",System.Data.Odbc.OdbcType.Double,8);
pc.Add("name",System.Data.Odbc.OdbcType.Char,8);
int count = this.al.Count;
this.progressBar1.Maximum=count;
cn.Open();
for(int i=0;i<count;i++)
{
string name ="";
double ox=0,oy=0;
Form1.splitString(ref name,ref ox,ref oy,this.al[i].ToString());

cmd.Parameters["id"].Value=i;
cmd.Parameters["ox"].Value=ox;
cmd.Parameters["oy"].Value=oy;
cmd.Parameters["name"].Value="name";
this.progressBar1.Value=i+1;
cmd.ExecuteNonQuery();
}
}
另外我还用postgresql尝试了一下速度也超慢,是不是.net控制数据库除了微软自己的(Access、SQL)
以外都特别慢呀????哪位同仁能上来解释一下多谢了
...全文
1549 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
lx4587 2005-11-10
  • 打赏
  • 举报
回复
ding 问题没解决!!!!
shanminmin 2005-11-01
  • 打赏
  • 举报
回复
你的mysql是在本机嘛?如果是,在cmd.ExecuteNonQuery();后面加一个Application.DoEvents();看看。
hoking3210 2005-11-01
  • 打赏
  • 举报
回复
关注
lx4587 2005-11-01
  • 打赏
  • 举报
回复
dddddd,没人会吗?
lx4587 2005-10-26
  • 打赏
  • 举报
回复
那用c#向MySql,sql、 server、oracale等数据库中大量插入数据,岂不是没有办法了?
vickyyu 2005-10-26
  • 打赏
  • 举报
回复
Access数据库是文件形数据库,在用户少、数据库不大的情况下操作是很快的,用户多、数据库大的时候,就会特别慢。
而MYSQL、sql server、oracle数据库在设计过程中考虑到太多的并发、事务等因素,所以你会感觉到比ACCESS慢,这是很正常的。
我认为现在的速度都是正常的了,无法再提升了。
lx4587 2005-10-26
  • 打赏
  • 举报
回复
自己顶
yueliang1982 2005-10-26
  • 打赏
  • 举报
回复
是否和你my sql数据库的结构有关呢,比如不必要的索引之类的

或者看看同样结构在sql server中的速度怎样
lx4587 2005-10-25
  • 打赏
  • 举报
回复
顶,没人回答吗?
lx4587 2005-10-25
  • 打赏
  • 举报
回复
不知道大家都看没看我的代码,用Access速度一点问题没有,我共用了三种不同的方式进行插入。
mobydick 2005-10-25
  • 打赏
  • 举报
回复
使用DataSet。
china_yx 2005-10-25
  • 打赏
  • 举报
回复
连接件的性能考虑过吗?
lx4587 2005-10-25
  • 打赏
  • 举报
回复
速度能提高吗?我从dataset中插入不也一样吗,现在的问题就是速度超级慢,怎么解决?
liuqm 2005-10-25
  • 打赏
  • 举报
回复
可以先将数据存储在一个临时的数据库,或是XML中,

然后,

等到一个比较好的时间,在将数据倒入到mysql中就可以了
lx4587 2005-10-25
  • 打赏
  • 举报
回复
问题沉底自己顶一下,求高手指教!!!
lx4587 2005-10-25
  • 打赏
  • 举报
回复
没人回答?没有高手?
lx4587 2005-10-24
  • 打赏
  • 举报
回复
jeffwangxm 说的 select 怎么去掉,我没用可视化生成呀
到底速度慢的原因是什么,哪位仁兄帮忙解释一下
vickyyu 2005-10-24
  • 打赏
  • 举报
回复
你可以先生成一个大的SQL脚本,然后一次性提交给数据库
速度应该会有所提高
StringBuilder sb = new StringBuilder();
for(int i=0;i<count;i++)
{
sb.append(YourSql);
}
.....
cmd.CommandText=sb.ToString();
.....
jeffwangxm 2005-10-24
  • 打赏
  • 举报
回复
可视化生成的this.sqlInsertCommand1.CommandText中有个select,去掉就行了
jimh 2005-10-24
  • 打赏
  • 举报
回复
string strSql ="insert into test.sima values (?,?,?,?)";
修改一下你的insert语句,把字段名都指定,看看是否不一样?
string strSql ="insert into test.sima (id,ox,oy,name) values (?,?,?,?)";
加载更多回复(9)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧