access多线程安插数据-"无法更新;当前被锁定"
access多线程插入数据-无法更新;当前被锁定不清楚到底是数据库的问题还是程序的问题诡异的是也不是次次
access多线程插入数据-"无法更新;当前被锁定"
不清楚到底是数据库的问题
还是程序的问题
诡异的是
也不是次次报错,偶尔可以跑完
C# codepublic 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(); }
[解决办法]这个和ACCESS和SQLSERVER没有关系的
主要还是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();
}
[解决办法]public void catchdate(int i) //插入
{
OleDbCommand com = new OleDbCommand("insert into log(url) values('http://"+m.Groups[2].Value+"')", conn);
com.ExecuteNonQuery();
}
大概是这样吧
[解决办法]文件式的都是这样,文件式的你也可以试一试Microsoft SQL Server Compact 3.5,我不知道它是不是比Access快,你可以试一下。如果感觉慢,也不用从多线程入手,多半是数据库设计问题。
数据库采用多线程读写往往不是为了效率主动开多线程去读写,而是服务端的设计,比如异步通信,迫使设计者去对数据库进行多线程读写。