Hallo Zusammen Ich habe seit einiger Zeit Probleme mit meinen SQL Abfragen in meinem C# Programm. Der SQL Code ist ok er funktioniert aber es kommt manchmal vor das Daten in der DB vorhanden sind aber nicht ausgelesen werden und dann arbeitet das Programm nicht korrekt und stürzt auch das ein und andere mal ab. Manchmal hilft ein Thread.Sleep(800); ist natürlich keine gute Lösung. Es kommt mir fast so vor das mit steigenden Datensätze in der *.mdb die Problem gekommen sind. Danke. Kann mir jemand bitte helfen? ****************** Abfragen mit dieser Funktion: public OleDbDataReader ExecuteSelect(string SQLString) { OleDbDataReader reader; OleDbCommand cmd = new OleDbCommand(SQLString,_conn); try { reader = cmd.ExecuteReader(); } catch (Exception) { return null; } return reader; } ********************* Datensatz hinzufügen, ändern: public int ExecuteNonQuerry(string SQLString) { OleDbCommand cmd = new OleDbCommand(SQLString, _conn); try { return cmd.ExecuteNonQuery(); } catch (Exception exx) { return -1; } }
Klatec schrieb: > Der SQL Code ist ok bezweifel ich. Klatec schrieb: > Datensatz hinzufügen, ändern: > public int ExecuteNonQuerry(string SQLString) > { > OleDbCommand cmd = new OleDbCommand(SQLString, _conn); d.H. du bastelst deine Daten in den SQL-String hinein? Kennst du den kleinen Bobby Tables? mit cmd.Parameters.Add(new OleDbParameter("@NAME", "Robert'); Drop table --")); wär das nicht passiert.
:
Bearbeitet durch User
Εrnst B. schrieb: > d.H. du bastelst deine Daten in den SQL-String hinein? Er programmiert ja auch in C#. Was erwartest du da?
Warum hast du "Datensatz hinzufügen/ändern" gepostet? Willst du damit implizieren, dass du schreibst und gleich darauf beim Lesen sie neuen Daten nicht bekommst? Oder hast du das nur zur Verwirrung gepostet? Wie verarbeitest du die "reader" Ergebnisse? Arbeitest du korrekt mit dem Stream?
Hallo Danke für eure Antworten. Leider habe ich das Problem das manchmal nichts von der DB zurück bekommen bei schon länger vorhanden Datensätzen und auch bei jenen die vielleicht fünf/sechs Programmzeilen davor hinzugefügt wurden. z.B. hier schreibe ich in die DB private void vWriteOpt(string Data, int SatzNr, string col) { string strSqlAbf = " UPDATE Opt SET " + col + " = '" + Data + "' Where SatzNr = " + SatzNr; dbReader.te_ExecuteNonQuerry(strSqlAbf); } mit dem Code lese ich string strSqlAbf = "Select * From BestAll Where SetNr = " + frmBestList.intSetNrBestArtik; OleDbDataReader reader = dbReader.ExecuteSelect(strSqlAbf); while (reader.Read()) { txtBestFile.Text = Convert.ToString(reader["DateiName"]); txtAblNr.Text = Convert.ToString(reader["AblageNr"]); txtAbrufNr.Text = Convert.ToString(reader["AbrufNr"]); txtProj.Text = Convert.ToString(reader["ProjName"]); txtAuftrNr.Text = Convert.ToString(reader["AuftrNr"]); } reader.Close(); Lg. Hans K.
Klatec schrieb: > string strSqlAbf = " UPDATE Opt SET " + col + " = '" + Data > + "' Where SatzNr = " + SatzNr; Sei froh, dass dieser Schrott nur teilweise funktioniert und wir davon verschont bleiben. Warum? S. oben. leo
Hallo Zusammen Ok, ich weiß das ihr die Spezialisten seid und wusste schon vor eurer vernichteten Kritik das meine Art Code zu schreiben umständlich ist, das habe ich schon von einigen anderen Stellen gehört. Wartungsunfreundlich, umständlich, das ginge viel einfacher. Ich habe sehr spät mich mit dieser Materie begonnen zu beschäftigen, ja ich gebe auch zu das mir viele Basics fehlen. Wenn ich der riesen Programmiere wäre bräuchte ich keine Hilfe und ich hatte gehofft ich fände jemanden der mir verständlich erklärt wo das Problem liegt, ohne mir zu sagen es sitzt vor der Tastatur. Ich habe diese Routinen auch aus dem wwww aus verschiedenen Beispielen zusammen gestoppelt. Das Ding läuft seit gut vier Jahren problemlos bis vor einigen Wochen diese begannen. Ok umständlich und schlecht zu warten ist die eine Sache aber es hat den Anschein als würden plötzlich Timing-Probleme auftreten. Ich hätte gehofft es könnte mir jemand mit Beispielen weiterhelfen woran es liegt das die gleiche Methode im einen Augenblick funktioniert im nächsten nicht mehr. Bitte. Danke. Lg. Hans K.
Klatec schrieb: > Bitte. Du könntest damit anfangen, dir den Fehler anzeigen zu lassen anstatt ihn wegzuignorieren:
1 | catch (Exception e) { |
2 | MessageBoxWithAlarmAndSoundAndBlink.show(e); |
3 | return null; |
4 | }
|
:
Bearbeitet durch User
Klatec schrieb: > umständlich Nein, der Code ist eine tickende Bombe. Lerne endlich mal die Grundlagen. Stichhwort: "SQL-Injection". leo
Es ist völlig unklar was das Problem sein könnte -Abhängige Tabellen werden vielleicht zu spät upgedated und deswegen passen irgendwelche Schlüsse kurzfristig nicht also update A dann update B und die Abfrage auf C funktioniert nur richtig wenn A und B komplett upgedated wurde usw. -das ganze mit Timer oder Threads usw. Es gibt sehr sehr viele Möglichkeiten warum es sich so verhält bei deiner beschriebenen Erfahrung und der allgemeinen Nutzungshäufigkeit der MDB/SQL/OleDbDataReader Technologie gehe ich aber von einem Programmierfehler aus könnte irgenwelche Zahlen überlaufen weil du schon lange Indizes oder sowas hochzählst? der Fehler könnte ganz wo anders liegen und es ist absolut unklar wie du allgemein auf Fehler reagierst (Loggst du die mit oder gehen die einfach verloren?) und,und,und...
Klatec schrieb: > Das Ding läuft seit gut vier Jahren problemlos bis vor einigen Wochen > diese begannen. Ok umständlich und schlecht zu warten ist die eine Sache > aber es hat den Anschein als würden plötzlich Timing-Probleme auftreten. Das kann möglicherweise tatsächlich ein Problem sein. Die Frage ist: wieviele Clients greifen denn gleichzeitig auf diese "Datenbank" zu? Nur einer oder können es auch mehrere zur gleichen Zeit sein?
Hallo Zusammen Nochmals Danke für eure Antworten, ich muss mir jetzt einmal überlegen wie ich weiter vorgehen werde. Lg. Hans K.
https://www.vb-paradise.de/index.php/Thread/94955-die-vier-Views-auf-Video/ Die Erklärung ist zwar für vb... Aber das gleiches gilt auch für c#
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.