不清楚到底是数据库的问题
还是程序的问题诡异的是
也不是次次报错,偶尔可以跑完
public void loaddata()
{
for (int i = 0; i < 75; i=i+5) //线程
{
Thread myThread = new Thread(delegate() {catchdate(i);});
myThread.Start();
}
}public void catchdate(int i) //插入
{
OleDbCommand com = new OleDbCommand("insert into log(url) values('http://"+m.Groups[2].Value+"')", conn);
OleDbDataReader dr = com.ExecuteReader();
dr.Close();
}
还是程序的问题诡异的是
也不是次次报错,偶尔可以跑完
public void loaddata()
{
for (int i = 0; i < 75; i=i+5) //线程
{
Thread myThread = new Thread(delegate() {catchdate(i);});
myThread.Start();
}
}public void catchdate(int i) //插入
{
OleDbCommand com = new OleDbCommand("insert into log(url) values('http://"+m.Groups[2].Value+"')", conn);
OleDbDataReader dr = com.ExecuteReader();
dr.Close();
}
兄弟
换个 sqlite 行吗?
主要还是OleDbDataReader的问题
DataReader是独占的,同一个时间只能有一个DataReader
加个lock吧lock(this)
{
OleDbCommand com = new OleDbCommand("insert into log(url) values('http://"+m.Groups[2].Value+"')", conn);
OleDbDataReader dr = com.ExecuteReader();
dr.Close();
}
insert竟然用了ExecuteReader
换成ExecuteNonQuery()吧
其实我试过 ExecuteNonQuery() ,报错,“无法将类型int隐式转化为.....”
这两个到现在我也不懂是啥意思
用着不报错我就懒得管了......
{
OleDbCommand com = new OleDbCommand("insert into log(url) values('http://"+m.Groups[2].Value+"')", conn);
com.ExecuteNonQuery();
}大概是这样吧
跪求了!
可以查查这方面的知识
数据库采用多线程读写往往不是为了效率主动开多线程去读写,而是服务端的设计,比如异步通信,迫使设计者去对数据库进行多线程读写。