c# + access
windows xp + NTFS
起初程序运行正常,可以insert和update,一段时间后(此时已经insert成功200次,update成功40次)所有涉及到insert和update的操作全部出现该异常:
未处理 System.Data.OleDb.OleDbException
Message="操作必须使用一个可更新的查询。"
Source="Microsoft JET Database Engine"
ErrorCode=-2147467259在论坛上翻了一下帖子大多说是权限问题,我的这个应该不是权限的问题。另外:使用了多线程访问数据库,不知道有没有问题。
windows xp + NTFS
起初程序运行正常,可以insert和update,一段时间后(此时已经insert成功200次,update成功40次)所有涉及到insert和update的操作全部出现该异常:
未处理 System.Data.OleDb.OleDbException
Message="操作必须使用一个可更新的查询。"
Source="Microsoft JET Database Engine"
ErrorCode=-2147467259在论坛上翻了一下帖子大多说是权限问题,我的这个应该不是权限的问题。另外:使用了多线程访问数据库,不知道有没有问题。
并且确定access文件不是 只读格式
于是我就想牺牲一下性能,串行访问数据库,不知道在多线程时以下的lock语句能不能达到并发控制的目的。
我在所有的数据库访问函数里都加了lock (Lock_db),包括select。
异常出现时一下弹出10几个对话框,是不是意味着我没能够实现并发控制?
static class dbAcc
{
public static string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=#db.mdb";
private static string Lock_db = ""; public static void addNew()
{
string myExecuteQuery = "insert或update语句";
OleDbConnection myConnection = new OleDbConnection(connectionString);
OleDbCommand myCommand = new OleDbCommand(myExecuteQuery, myConnection);
try
{
lock (Lock_db) //不知道可不可以
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
}
catch (OleDbException exp)
{
MessageBox.Show(exp.Message);
}
finally
{
myConnection.Close();
}
}
try
{
lock (Lock_db)
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
}
catch (OleDbException exp)
{
if (!exp.Message.Contains("创建重复的值") && !exp.Message.Contains("字段太小而不能接受所要添加的数据的数量"))
MessageBox.Show("dbAcc_addNew:"+exp.Message);
}
{
myConnection.Close();
}
mx.WaitOne();
AddNew();
mx.ReleaseMutex();
试试看...