Forum: PC-Programmierung C# Probleme bei SQL Abfragen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Klatec (Gast)


Bewertung
0 lesenswert
nicht 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:

Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
Warum programmiert du nicht objektorientiert? So wird das nix

von Jan H. (j_hansen)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Klatec schrieb:
> umständlich

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

leo

von cppbert3 (Gast)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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#

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.