Forum: PC-Programmierung C# Probleme bei SQL Abfragen


von Klatec (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

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
von IT-Abteilung (Gast)


Lesenswert?

Εrnst B. schrieb:
> d.H. du bastelst deine Daten in den SQL-String hinein?

Er programmiert ja auch in C#. Was erwartest du da?

von Wolfgang Höhne (Gast)


Lesenswert?

Warum programmiert du nicht objektorientiert? So wird das nix

von Jan H. (j_hansen)


Lesenswert?

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?

von Klatec (Gast)


Lesenswert?

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.

von leo (Gast)


Lesenswert?

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

von Klatec (Gast)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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
von leo (Gast)


Lesenswert?

Klatec schrieb:
> umständlich

Nein, der Code ist eine tickende Bombe. Lerne endlich mal die 
Grundlagen. Stichhwort: "SQL-Injection".

leo

von cppbert3 (Gast)


Lesenswert?

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...

von c-hater (Gast)


Lesenswert?

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?

von Klatec (Gast)


Lesenswert?

Hallo Zusammen

Nochmals Danke für eure Antworten, ich muss mir jetzt einmal überlegen 
wie ich weiter vorgehen werde.

Lg.

Hans K.

von Wolfgang Höhne (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.