2012-04-13 3 views
1

Ich schreibe eine Anwendung in C#, die mit einer MS Access-Datenbank (.accdb) verbindet. Die Anwendung wird von mehreren Arbeitern verwendet und jeder von ihnen wird von Zeit zu Zeit mit der Datenbank verbunden - um ihre Präsenz zu aktualisieren (Aktualisiere die Anmeldezeit).C#/accdb: Fehler erhalten "Die Operation muss eine aktualisierbare Abfrage verwenden."

Alle anderen Funktionen, die mit der gleichen Datenbank verbunden sind, scheinen gut zu funktionieren, aber dies funktioniert nicht. Ich bekomme den untenstehenden Fehler aus irgendeinem Grund und es heißt das Problem ist in der Zeile wo meine ExecuteNonQuery() ist. Der Befehlstext wird mit der Zeichenfolge myUpdateNonquery definiert.

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

Die Funktion:

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; 
} 
+0

möglich Duplikat [Fehler: Operation muss eine aktualisierbare Abfrage verwenden] (http://stackoverflow.com/questions/ 2749674/error-operation-must-use-an-updateable-query) – Fionnuala

Antwort

2

Die SQL sieht gut aus. Es scheint ein Berechtigungsproblem zu sein, beschreibt der Artikel unten, wie dieses Problem zu beheben:

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

+0

Aber andere Methoden mit dem UPDATE-Befehl funktionieren und geben mir nicht den Fehler. Das macht mich verwirrt:/ – Val

+0

Okay. Verknüpfen Sie in access eine Testzeile in der AgentSignIn-Tabelle, erstellen Sie dann eine neue Abfrage und führen Sie Folgendes aus: UPDATE AgentSignIn SET signInTime = NOW() WHERE agentName = 'TestRow' Wenn dies ausgeführt wird, kann es die Zeile sein: OleDbType .Char) .Wert = appSettings.mynick; Der Datentyp char akzeptiert nur 1 Zeichen (keine Zeichenfolge), Sie müssen ihn möglicherweise ändern in: OleDbType.VarChar) .Value = appSettings.mynick; –

+0

Ich habe die Erlaubnis Änderungen von dem Artikel unter Ihrem Link gemacht. Es scheint, dass es den Benutzernamen bereits richtig speichert und die Anmeldezeit aktualisiert. Aber jetzt bekomme ich einen anderen Fehler in einer anderen Methode (meldet andere, inaktive Benutzer ab). Der Fehler ist: 'System.Data.OleDb.OleDbException (0x80004005): Konnte 'xxxxxxxx.accdb' nicht verwenden; Datei wird bereits verwendet. – Val

Verwandte Themen