Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Access Datenbankanbindung


DanteMay - Do 08.12.16 12:41
Titel: Access Datenbankanbindung
Alola,
ich sitze derzeit an einem Projekt welche Mit Kundendaten zu tun hat. Als Backend gibt es ne access Datenbank mit mehreren Tabellen. Andere Foreneinträge konnte ich nicht auf mein Problem projizieren (oder war einfach nur zu dumm dafür).

microsoft sagt mir ich solle SQL Befehlsdinger verwendet aber die Datenbank ist ja keine SQL DB. Egal...

Hier mein kläglicher Versuch:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
try
            {
                //string connect = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = Datenbank1.accdb";
                string auswahl = "SELECT * KNachname FROM Kunde";
                System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(auswahl);
                System.Data.SqlClient.SqlCommand test = new System.Data.SqlClient.SqlCommand();
                test.CommandType = System.Data.CommandType.Text;
                test.CommandText = "insert into Kunde('KNachname') values (Dragonil)";
                test.Connection = con;
                con.Open();
                test.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Daten wurden erfolgreich gespeichert!""Erfolg");
            }
            catch
            {
                MessageBox.Show("Fehler beim speichern der Daten!""Achtung!");
            }


Vielleicht sollte ich auch erwähnen das ich mich mit C# erst seit kurzem befasse^^
er springt nach
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(auswahl); direkt zum catch.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Do 08.12.16 12:53

Du solltest der Connection den Connectionstring geben nicht das sql statement. Also vermutlich das was da als connect auskommentiert ist.
Die auswahl Variable ist vermutlich überflüssig da du die dann nicht mehr benutzt. Wenn du die doch brauchst ist der Syntax falsch. Entweder select * from oder select KNachname from oder zumindest ein , zwischen * und KNachname.

Edit: Nebenbei du solltest im catch Block die Exception auch auswerten, so versteckst du nur den tatsächlichen Fehler und sagst "geht nicht". Das hilft keinem nicht mal dem User. Dem Entwickler des Codes erst recht nicht.


DanteMay - Do 08.12.16 13:02

könntest du das bitte im code wiedergeben?^^


Ralf Jansen - Do 08.12.16 13:12

Könnte ich, finde es aber besser wenn du es selbst probierst. Die Dinge die ich beschrieben habe sollten ja das Problem einigermassen wieder geben. Wenn das nicht verständlich war frag nochmal nach.


erfahrener Neuling - Do 08.12.16 13:17

Als kleine Hilfe:
Das hier gibt dir den Text einer (allgemeinen) Exception aus.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
try 
{
  ...
}
catch (Exception ex) 
{
    MessageBox.Show("Fehler: " + ex.Message);
}


DanteMay - Do 08.12.16 15:04

sitze seit 2 tagen an dem mist und hab mich komplett festgefahren^^ also bitte kein "probier es selber aus"^^ ich raff in dem punkt gerade nichts mehr^^ ich will erstma nur ein code snippet welcher in dieser umgebung funktioniert^^


erfahrener Neuling - Do 08.12.16 15:24

Ok, für mich sieht es so aus, als hättest du im Insert-Script etwas vertauscht

C#-Quelltext
1:
test.CommandText = "insert into Kunde(KNachname) values ('Dragonil');";                    


Kann es gerade nicht testen, aber die values müssen glaube ich immer in Anführungsstriche.
Was steht denn in der Exception?


DanteMay - Do 08.12.16 15:29

siehe anhang


erfahrener Neuling - Do 08.12.16 15:38

Ich vermute, es liegt an deiner (nicht zustande kommenden) Datenbank-Verbindung.

Mehr da zu hier [http://www.lmdfdg.com/?q=das+format+der+initialisierungsreihenfolge+stimmt+nicht+mit+der+spezifikation+%C3%BCberein%2C+die+bei+index]


Ralf Jansen - Do 08.12.16 15:46

Versuchen wir mal zu helfen. Du bist zuweit weg von funktionierendem Code das ich nicht einfach hier was funktionierendes hinwerfen will. Am besten du fängst frisch an und legst das was du hast zur Seite.
Die SqlXXX Klassen sind für den SqlServer du willst aber eine Verbindung zu Access. Um eine Verbindung zu Access hinzubekommen brauchst du Klassen aus der OleDBXXX Familie.

Deine erster Schritt wäre also

a.) Erzeuge eine Instanz der Klasse OleDbConnection übergib ihr den passenden Connectionstring zu deinem access File (vermutlich das was du auskommentiert hast und in der Variable connect steckt)
b.) rufe an dieser Instanz open auf.

Wenn du das geschafft hast und der Aufruf von open keine Exception wirft zeig den Code dazu und wir gehen die nächsten Schritte an.