ADO.NET / C#
-
folgendes problem:
ich habe versucht, mit c# und ado eine kleine datenbankanbindung zu basteln.
ich möchte eigentlich nur ein paar werte lesen und updaten.
Meine update-funktion funktioniert so lange ich keine werte mit Read eingelesen habe einwandfrei. habe ich vorher die daten mit Read eingelesen wirft er im Update eine Xception.
ich zerbreche mir bereits seit stunden den kopf darüber, wie ich das lösen kann. aber ich bekomms einfach nicht gebacken.
daher bitte ich um hilfe.auszug aus meinem code:
public bool Open() { try { if(connection==null && strDatabase!=null) { string strConnection="Provider=Microsoft.Jet.OleDB.4.0;Data Source="+strDatabase+";"; connection=new OleDbConnection(strConnection); } connection.Open(); return true; } catch { } return false; } . . . public bool Close() { try { if(connection!=null) { connection.Close(); connection=null; return true; } } catch { } return false; } . . . public object Read(object objID) { OleDbCommand commando = new OleDbCommand("SELECT "+objID.ToString()+" FROM "+strTable,connection); if(connection != null && connection.State==ConnectionState.Open) { try { OleDbDataReader rdr=commando.ExecuteReader(); if(rdr.Read()) { return rdr[objID.ToString()]; } rdr.Close(); } catch { } } return false; } . . . public bool Update(object objID,object objValue) { string strSQLStatement="UPDATE ["+strTable+"] SET "+objID.ToString()+" = "+objValue.ToString()+";"; return ExecuteNonQuery(strSQLStatement); } private bool ExecuteNonQuery(string strSQLStatement) { try { if(connection!=null && connection.State==ConnectionState.Open) { OleDbCommand command = new OleDbCommand(strSQLStatement,connection); command.ExecuteNonQuery(); return true; } } catch { } return false; }
-
gummibärli,
wie lautet denn die Botschaft, die Dir Deine Exception gibt?
Vielleicht ist das betreffende Datenbankfeld ja vom Typ string und Du hast bloß die Hochkommata vergessen ...?
-
die Zeile
command.ExecuteNonQuery();
wirft die Exception
InvalidOperationException
[msdn]
Die Verbindung ist nicht vorhanden.
- oder -Die Verbindung ist nicht offen.
- oder -Ein Befehl in einem Transaktionskontext, der von dem Kontext abweicht, in dem die Verbindung ursprünglich eingetragen wurde, kann nicht ausführt werden.
[/msdn]was ich nicht verstehe ist eben, wenn ich meine Readmethode nicht vor der Updatemethode aufrufe funzt das ganze,
rufe ich einmal Read und ansch. Update auf, so crasht das ding....
weiters habe ich festgestellt, das der Fehler nur dann auftritt,
wenn im Read folgender codeblock drinnen isOleDbDataReader rdr=command.ExecuteReader();
-
gummibärli,
mir ist gerade aufgefallen, daß Du den DataReader überhaupt nicht schließt. Das mußt Du tun, bevor Du die Connection für einen anderen Vorgang verwenden willst (steht auch in der Hilfe).
Und prinzipiell sollte eine Connection immer nur kurz für einen Vorgang geöffnet und danach sofort wieder geschlossen werden.
-
ja, das hab ich auch schon versucht, aber is total egal, ob ich den datareader schliesse, der fehler kommt immer - versuchs mal !