Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Sonstige Fragen » SQL Abfrage » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen SQL Abfrage
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

SQL Abfrage Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,
ich möchte gerne in meinem Programm eine Datenbank (eine externe .accdb) auslesen. Wie mache ich das mit SQL Abfrage in C#?

Ich habe hier ein Beispiel, wie ich es schon verwendet habe. Es funktioniert allerdings eben nicht.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
public string[] LeseDatenbankAusTKundenAnmeldedaten()
          {
              string[] aAnmeldedaten = new string[2];

              // Erstell wieder eine Verbindung zur Datenbank
              aDatenbankverbindung = new OleDbConnection(aVerbindungspfad);
              aDatenbankverbindung.Open();
              aSQLBefehl = aDatenbankverbindung.CreateCommand();

              // ist der Befehl zum Auslesen der Tabelle Kunden
              aSQLBefehl.CommandText = "SELECT Name, Passwort FROM Kunden";

              // leitet das auslesen der Datenbank ein
              OleDbDataReader aDatenSet = aSQLBefehl.ExecuteReader();

              for (int i = 0; i < 2; i++)
              {
                  if (i == 1)
                  {
                     aAnmeldedaten[0] = aDatenSet.GetString(2);
                  }
                  else if (i == 2)
                  {
                     aAnmeldedaten[1] = aDatenSet.GetString(16);
                  }
              }
              aDatenbankverbindung.Close();
              return aAnmeldedaten;
          }


Zur Erklärung:

Zitat:
aSQLBefehl, und aDatenbankverbindung sind am Anfang der Klasse deklarierte OleDbConnection bzw. OleDbCommand Variablen.


Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
29.03.2013 12:06 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Habe bisher nicht mit Datenbanken gearbeitet, kann daher auch nicht viel beitragen.
Was mir aufgefallen ist:
code:
1:
2:
3:
4:
5:
6:
7:
              for (int i = 0; i < 2; i++)
              {
                  if (i == 1)
                  //...
                  else if (i == 2)
                  //...
              }

i ist entweder 0 oder 1, der Fall i==2 tritt also nie ein.

__________________
Syntax Highlighting fürs Board (Link)
29.03.2013 12:55 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ups,
habe das ausgebessert funktioniert jedoch immer noch nicht unglücklich

Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
29.03.2013 13:38 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo gib mal bitte die Definitionen von aSQLBefehl und aDatenbankverbindung. Und die genaue Fehlermeldung...

VG,

Karlito
30.03.2013 14:23 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
for (int i = 0; i < 2; i++) {
    if (i == 1) {
        aAnmeldedaten[0] = aDatenSet.GetString(2);
    } else if (i == 2) {
        aAnmeldedaten[1] = aDatenSet.GetString(16);
    }
}


ist sowieso völlig unsinnig. Wieso nicht gleich so (Korrektur des oben angesprochenen Fehlers eingerechnet)?

code:
1:
2:
aAnmeldedaten[0] = aDatenSet.GetString(2);
aAnmeldedaten[1] = aDatenSet.GetString(16);


__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Airblader: 30.03.2013 19:50.

30.03.2013 19:17 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

@Karlito: Wenn man das wie Airblader erwähnt ausbessert kommt folgende Fehlermeldung:

Zitat:
InvalidOperationException wurde nicht behandelt. Keine Daten für die Zeile/Spalte.


Wobei ich dazu sagen muss, dass in der verbundenen Datenbank auf Spalte 2 / 16 sehr wohl Daten sind... geschockt

Zur Definition von aSQLBefehl und aDatenbankverbindung:

code:
1:
2:
private static OleDbConnection aDatenbankverbindung = null; // Erstellt eine Datenbankverbindung
private static OleDbCommand aSQLBefehl = null; // Gibt der Datenbank Befehle


@Airblader: Frag ich mich auch gerade... verwirrt

edit: desweiteren habe ich jetzt in meiner Access- Datenbank mit der ich mich im Programm verbinde, "SELECT Name, Passwort FROM Kunden" versucht und er hat mir exakt die zwei gewollten Spalten angegeben.

Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von InformaTiger: 30.03.2013 23:59.

30.03.2013 22:32 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Was mir persönlich dann noch mal mehr zu schaffen macht ist das ich so einen "auslese" Code im selben Programm schon mal geschrieben habe, er dort funktioniert und hier nicht. böse traurig
Dieser Code folgt:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
private void LeseDatenbankAusTNachrichten(string mName)
          {
              aSQLBefehl = aDatenbankverbindung.CreateCommand();

                // ist der Befehl zum Auslesen der Tabelle Nachrichten
              aSQLBefehl.CommandText = "SELECT * FROM Nachrichten";

                // leitet das auslesen der Datenbank ein
              OleDbDataReader aDatenSet = aSQLBefehl.ExecuteReader();

                while(aDatenSet.Read())
              {
                  if (aDatenSet.GetString(2) == aEmpfaengerName)
                  {
                      MessageBox.Show("Von: " + aDatenSet.GetString(1) + "\nAm: " + aDatenSet.GetDateTime(3) + "\nNachricht: " + aDatenSet.GetString(4));
                  }
              }
              aDatenSet.Close();
          }


Ich verstehe allerdings eben auch nicht woran der Fehler liegen könnte... unglücklich

Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
31.03.2013 00:11 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich kenne die API dazu nicht, aber wenn sie ansatzweise der von OracleSQL unter Java ähnelt und das Query

code:
1:
SELECT Name, Passwort FROM Kunden


lautet, dann sollten die obigen zwei Zeilen so ausshen:

code:
1:
2:
aAnmeldedaten[0] = aDatenSet.GetString(0);
aAnmeldedaten[1] = aDatenSet.GetString(1);


Vielleicht aber auch mit 1 und 2 statt 0 und 1 – je nachdem, wo diese API zu zählen beginnt.

Ist die Kapitalisierung von Methodennamen unter C# eigentlich Standard? Sieht in meinen Java- und Javascript-geprägten Augen fürchterlich aus.

Die Namensgebung mit dem "a"-Prefix finde ich übrigens auch seltsam. Wofür soll das stehen?

air

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Airblader: 31.03.2013 12:47.

31.03.2013 12:45 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Leider ist mir das auch schon in den Sinn gekommen, hab das auch versucht. Leider trotzdem dieselbe Fehlermeldung.

Zu dem "a"-Prefix: das ist eine Programmierkonvention an unserer Schule.

Zu der Kapitalisierung von Methodennamen: Du meinst, dass die Anfangsbuchstaben des nächsten Wortes Großgeschrieben werden? Das ist auch eine Konvention unserer Schule. Ob das ansonsten so gänglich ist weiß ich nicht...

Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
31.03.2013 13:09 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von InformaTiger
Zu der Kapitalisierung von Methodennamen: Du meinst, dass die Anfangsbuchstaben des nächsten Wortes Großgeschrieben werden?


Nein, CamelCase ist tatsächlich ein verbreiteter Standard. Typischerweise beginnen Variablen- und Methodennamen aber mit einem Kleinbuchstaben ("readLine", "getProeprty", ...), während die Großschreibung des ersten Buchstabens für Klassen reserviert ist.
Da die Schreibweise schon in den Klassen, die du verwendest, so enthalten zu sein scheint, ist es vermutlich ein C#-Standard.

Zurück zum Thema. Kann es sein, dass dir noch ein aDatenset.Read(); fehlt? Der Fehler, den ich im letzten Beitrag angesprochen habe, dürfte übrigens dennoch eine Rolle spielen, d.h. da sollte dennoch 0 und 1 (bzw. 1 und 2) stehen.

air
P.S.: Dass du am Unterrichtsstandard nichts ändern kannst ist klar – aber gewöhne dir sinnlose Prefixes bitte nicht an. Augenzwinkern

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Airblader: 31.03.2013 14:13.

31.03.2013 14:11 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo zusammen...

@Air: Groß geschriebene Methodennamen sind unter C# tatsächlich üblich. Auch sieht man oft die ungarische Notation. In der Firma, in der ich einmal gearbeitet habe, war das auch gang und gäbe (und nicht ganz mein Geschmack). Man kann sich über die Ästhetik streiten. Ich verstehe deinen Standpunkt, aber lass ihn mal selbst entscheiden ob er sich das angewöhnt... Schlussendlich entscheided oft eh dann der Chef oder der Auftraggeber über den anzuwendenden Codestyle.

Aber danke für die Tipps. Es freut mich wenn das Forum hier weiter belebt wird und deine Beiträge waren bisher wertvoll.

VG,

Karlito
31.03.2013 16:10 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Um vielleicht einem Missverständnis entgegenzuwirken: Wenn großgeschriebene Methodennamen C#-Standard sind, so sei es. Mein "Rat", sich etwas nicht anzugewöhnen, bezog sich auf die offenbar sinnlosen "a"-Präfixe – die sind ja hoffentlich kein C#-Standard; fiele mir jedenfalls schwer, das zu glauben. Augenzwinkern Ungarische Notation ist das Eine, aber die Präfixe sollten ja auch noch einen Sinn erfüllen (der sich mir hier entzieht).
In der Schule und an der Universität bekommt man leider eine ganze Menge Käse aufgetischt und Praktiken gelehrt, die mitunter seit Jahrzehnten obsolet sind, zum Beispiel der Mythos, dass guter Code möglichst viele Kommentare enthält.

Allerdings ist das alles ein anderes Thema. Erstmal gucken, ob's mit dem Read-Befehl endlich tut. Augenzwinkern

air

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Airblader: 31.03.2013 17:52.

31.03.2013 17:52 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sagen wir so, es funktioniert halb...
ich muss jetzt noch mehrere Varianten testen und kann erst dann genaueres Bescheid geben.

Aber es ist schon mal ein Ansatz zur Lösung des Problems. smile

Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#
31.03.2013 19:29 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hurra,
es funktioniert.... Prost

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
while (aKeineUebereinstimmung)
          {
                  aDatenSet.Read();
                  aAnmeldedaten[0] = aDatenSet.GetString(0);
                  aAnmeldedaten[1] = aDatenSet.GetString(1);
                  if (mBenutzername == aAnmeldedaten[0])
                  {
                      aKeineUebereinstimmung = false;
                  }
            }


Dieser Code hat es in sich! großes Grinsen

Tanzen

Danke, Airblader.
Danke, Karlito.
Danke, eulerscheZahl.

Lg
InformaTiger

__________________
Why do Java developers wear glasses? Because they can't C#

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von InformaTiger: 31.03.2013 20:41.

31.03.2013 20:41 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Super! Daumen hoch

code:
1:
2:
3:
4:
if (mBenutzername == aAnmeldedaten[0])
{
    aKeineUebereinstimmung = false;
}


könnte man übrigens noch verkürzen zu

code:
1:
aKeineUebereinstimmung = (mBenutzername != aAnmeldeDaten[0]);


Wobei da auch die Meinungen auseinandergehen, ob sowas guter Stil ist. Schadet aber nicht, wenn man solche Dinge ab und an mal sieht. Augenzwinkern

air

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.
31.03.2013 20:59 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Sonstige Fragen » SQL Abfrage