【问题标题】:C# / accdb: Getting error "Operation must use an updateable query."C#/accdb:出现错误“操作必须使用可更新查询。”
【发布时间】:2012-04-25 16:18:42
【问题描述】:

我正在用 C# 编写一个连接到 MS Access 数据库 (.accdb) 的应用程序。该应用程序将被多个工作人员使用,并且每个工作人员都会不时连接到数据库 - 以刷新他们的状态(刷新登录时间)。

连接到同一数据库的所有其他功能似乎都可以正常工作,但这个却不行。由于某种原因,我收到以下错误,它说问题出在我的ExecuteNonQuery() 所在的行。命令文本用字符串 myUpdateNonquery 定义。

System.Data.OleDb.OleDbException (0x80004005): Operation must use an updateable query.

功能:

public Boolean RefreshSignIn()
{
  Boolean successful = false;
  lock(dbLock)
  {
    try
    {
      string myConnectionString = connectionType + primarydbPath;
      OleDbConnection myConnection = new OleDbConnection(myConnectionString);
      string myUpdateNonquery = "UPDATE AgentSignIn SET signInTime = NOW() WHERE agentName = @p1";
      using(myConnection)
      {
        OleDbCommand myCommand = new OleDbCommand(myUpdateNonquery, myConnection);
        using(myCommand)
        {
          myCommand.Parameters.Add("@p1", OleDbType.Char).Value = appSettings.mynick;

          myConnection.Open();
          int updatedRows = myCommand.ExecuteNonQuery();
          if (updatedRows>0) {successful = true;}
        }
      }
    }
    catch(System.Exception ex)
    {
      MessageBox.Show("Error! Failed to keep you signed in to the database!\n\n"+ex.ToString());
    }
  }
  return successful;
}

【问题讨论】:

标签: c# sql .net ms-access


【解决方案1】:

SQL 看起来不错。这似乎是一个权限问题,下面的文章概述了如何解决这个问题:

http://www.mikesdotnetting.com/Article/74/Solving-the-Operation-Must-Use-An-Updateable-Query-error

【讨论】:

  • 但是使用 UPDATE 命令的其他方法确实有效并且不会给我错误。这让我感到困惑:/
  • 好的。在访问中,在 AgentSignIn 表中创建一个测试行,然后创建一个新查询并执行以下操作: UPDATE AgentSignIn SET signInTime = NOW() WHERE agentName = 'TestRow' 如果执行它可能是行:OleDbType.Char)。值 = appSettings.mynick;数据类型 char 将只接受 1 个字符(不是字符串),您可能需要将其更改为:OleDbType.VarChar).Value = appSettings.mynick;
  • 我对您链接下的文章进行了权限更改。似乎已经正确保存了用户名并刷新了登录时间。但现在我在不同的方法中遇到另一个错误(注销其他非活动用户)。错误是:System.Data.OleDb.OleDbException (0x80004005): Could not use 'xxxxxxxx.accdb'; file already in use.
  • 看起来另一个进程正在访问数据库文件并将您锁定。人们使用与 Access 不同的 RDMS 的主要原因之一(提供更好的并发性)。你试过测试行解决方案吗?
  • @ValCool 用户是否对 Access 数据库所在的文件夹拥有完全权限? Access 创建一个锁定文件 (.ldb),用户至少需要读/写权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
相关资源
最近更新 更多