Datenbank Updaten
-
Hi
Ich versuche krampfhaft meine Tabelle ainf nen MS SQL 2005 zu updaten.
Die daten hab ich schon unten aber möchte nach ner änderung einer spalte diese auch auf der datenbank aktualisieren.könnte einer mir bitte helfen o.O'
-
Nutzt Du DataAdapter? Wie stellst Du die VErbindung her?
-
Stichworte für die Doku: SqlConnection, SqlCommand, SqlDataAdapter und DataSet.
-
uh tschuldigung hab vergessen quellcode zu tippen ^^'
DataRow Row; dsIP = new DataSet(); conn = new SqlConnection("Data Source=(local);Initial Catalog=delspnue05;Integrated Security=SSPI"); daIP= new SqlDataAdapter("select * from IP_LIST order by IDNR", conn); daIP.Fill(dsIP, TableName); dgIP.DataSource = dsIP; dgIP.DataMember = TableName; for(int i=0;i<dsIP.Tables[0].Rows.Count;i++) { Row = dsIP.Tables[0].Rows[i]; if(Row["FERTIG"].ToString()=="n") { cbIP.Items.Add(Row["IP"]); } }
naja ... also man kann ja selber lesen, wie ich das mach ^^'
wenn einer verbesserungsvorschläge hat einfach raus ... bin darin noch sehr ungeübt
-
daIP.Update(dsIP);
Sehe ich nirgends. Und das ist diejenige Methode des DataAdapters, welcher die Änderungen am DataSet zurück in den Server schreibt.
-
jo mit dem hab ich es schon versucht ... nur kommt da ....
Eine nicht behandelte Ausnahme des Typs 'System.InvalidOperationException' ist in system.data.dll aufgetreten.
Zusätzliche Informationen: TableMapping['Table'] oder DataTable 'Table' kann nicht gefunden werden.
wenn ich daIP.Update(dsIP,"IP_LIST") eingeb kommt das hier:
Eine nicht behandelte Ausnahme des Typs 'System.InvalidOperationException' ist in system.data.dll aufgetreten.
Zusätzliche Informationen: Aktualisieren erfordert einen gültigen UpdateCommand, wenn eine DataRow-Auflistung mit modifizierten Zeilen weitergegeben wird.
-
Liefert Dein SQL Statement etwas sinnvolles Zurück?
Werden überhaupt TableRows mit Add hinzugefügt?Schau mal im Debugger nach.
-
ich konnt leider nix gscheids finden
es soll ja nur n existierender eintrag geändert werden oO'der debugger hilft mir mit den ganzen ziemlichst wenig, da er etwas unübersichtlich is ...
edit:
übeltäter gefunden ^^'
//dsIP.Tables[0].Rows[int.Parse(tbID.Text)-1]["Rechner"]=cbRechner.SelectedItem.ToString();
er sollte den Rechner in der Tabelle ändern ( macht er auch, da ich es im datagrid sehen kann)
wie es ausschaut mag er das nicht updaten ..... warum das denn?
-
Aktualisieren erfordert einen gültigen UpdateCommand, wenn eine DataRow-Auflistung mit modifizierten Zeilen weitergegeben wird.
Und Du hast einen gültigen UpdateCommand?
-
EDIT:
so jetz kommen bei mir keine fehlermeldungen mehr .... ABER er updated sie trotzdem nich oO' in meinem DataSet (&DataGrid) wird er hineingeschrieben, jedoch nicht in die datenbank.
dsIP.Tables[0].Rows[int.Parse(tbID.Text)-1].BeginEdit(); dsIP.Tables[0].Rows[int.Parse(tbID.Text)-1]["RECHNER"]=cbRechner.SelectedItem; dsIP.Tables[0].Rows[int.Parse(tbID.Text)-1].AcceptChanges(); daIP.Update(dsIP,"IP_LIST");
-
hiho
hmm also ich hab es jetzt erkannt aber noch nicht gelöst ^^'
dprivate void CreateAdapter() { daIP= new SqlDataAdapter("SELECT * FROM IP_LIST ORDER BY IDNR", conn); SqlCommand cmd = new SqlCommand("UPDATE IP_LIST SET RECHNER=@rechner WHERE IDNR=@idnr",conn); cmd.Parameters.Add("@rechner", SqlDbType.NChar, 50, cbRechner.SelectedItem.ToString()); cmd.Parameters.Add("@idnr", SqlDbType.NChar, 50, tbID.Text); daIP.UpdateCommand=cmd; }
Eine nicht behandelte Ausnahme des Typs 'System.Data.SqlClient.SqlException' ist in system.data.dll aufgetreten.
Zusätzliche Informationen: Systemfehler.
Dies kommt jetzt wenn ich
daIP.Update(dsIP.Tables[0]);
ausführen möchte
-
Hast Du irgendwo ein Transaction Log von Deiner Datenbank? Viellleicht lässt sich daraus etwas entnehmen (ungenügende Schreibrechte etc...). "Systemfehler" klingt für mich auf den ersten Blick nach einem Problem, welches nicht direkt in Deinem Code zu finden ist.
-
hmmm wo kann ich da nachschauen?
-
Was genau hast Du für einen DB Server?
-
MS SQL SERVER 2005
naja ... langsam hab ich das gefühl, dass es am syntax der UPDATE-funktion liegt ^^'
weil meine suchfunktion (string strSQL = "SELECT * FROM IP_LIST WHERE IP=192.168.150." + tbIPs.Text + " ,FERTIG=j";) auch eine fehlermeldung hervorruft ^^'
Eine nicht behandelte Ausnahme des Typs 'System.Data.SqlClient.SqlException' ist in system.data.dll aufgetreten.
Zusätzliche Informationen: Systemfehler.
leider hab ich die datenbank nich selbst gemacht
alles sind chars (mit verschiedenen größen)
-
hast Du an die '' gedacht?
-
ja hab ich ... mir is eingefallen, dass ich ma über exceptions mal schauen kann ^^'
er schmeißt mir das zurück:
Parallelitätsverletzung : Der UpdateCommand hat sich auf 0 Datensätze ausgewirkt.
-
kann mir keiner helfen? ich hab mal im INET geschaut. es gab schon mal n fall mit dem fehler, (wegen der benennung der Table (wegen dem "_") ich habs so mal versucht, hat jedoch nicht geholfen oO'
bitte um hilfe oO hock schon seit 3 tagen drann >_<
-
Nochmal zu der SELECT-Abfrage, die von Saruman angesprochenen '-Zeichen kann ich
in deiner Abfrage nicht erkennen!?SELECT * FROM [IP_LIST] WHERE [IP]='192.168.150." + tbIPs.Text + "' ,FERTIG='j'
... aber wahrscheinlich hast du es auch so
Hast du die Update-Query mal manuell im Query-Analyzer ausgefuehrt? Ich kann die Fehler dort oft besser finden, als in VS selbst.
Eine Parallelitaetsverletzung zeigt normalerweise an, das der Datensatz waehrend du ihn bearbeitest schon von jemand anderem modifiziert wurde.
Evtl. lohnt es sich hier mal mit Timestamps auseinanderzusetzen...//btw:
die WHERE-Klausel spricht den PK oder den UIX an !?!?!?
-
mein aktulles (seit 3 tagen) Updatecommand lautet so:
cmd = new SqlCommand("UPDATE "+ TableName +" SET RECHNER='"+cbRechner.SelectedItem.ToString()+"' WHERE IDNR='"+tbID.Text+"'",conn);
soweit ich weiß (und seh) hat die tabelle kein Primary Key oO (is das möglich?)
....wo is genau der query Analyzer? (hab ja noch kaum ahnung von DB -.-')
edit:
durch weiterforschen bin ich hierrauf gestoßen:
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpguide/html/cpconoptimisticconcurrency.aspjedoch blick ich das nich durch o.O'
ich versteh die parameter z.b. im C# - beispielcode nich:// The Update command checks for optimistic concurrency violations in the WHERE clause. custDA.UpdateCommand = new SqlCommand("UPDATE Customers (CustomerID, CompanyName) VALUES(@CustomerID, @CompanyName) " + "WHERE CustomerID = @oldCustomerID AND CompanyName = @oldCompanyName", nwindConn); custDA.UpdateCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); custDA.UpdateCommand.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 30, "CompanyName"); // Pass the original values to the WHERE clause parameters. SqlParameter myParm; myParm = custDA.UpdateCommand.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID"); myParm.SourceVersion = DataRowVersion.Original; myParm = custDA.UpdateCommand.Parameters.Add("@oldCompanyName", SqlDbType.NVarChar, 30, "CompanyName"); myParm.SourceVersion = DataRowVersion.Original;