Suche den richtigen Connectionstring
-
Hi,
hoffe Ihr könnt mir helfen. Bei mir hängt's mal wieder bei der Datenbankanbindung. Spiele gerade ein bisschen mit Expression Blend 4 rum und versuche eine WPF zu erstellen.
Klappt soweit auch ganz gut, nur leider bekomme ich keine Verbindung zu meiner Datenbank.
Die Datenbankdatei ist auf "D:/Konten.mdf" abgespeichert.
Nun habe ich ein Problem mit dem Connectionstring, hab aus einem Beispiel diesen Code übernommen und für meine Nutzen umgebaut, funktioniert nur leider nicht
string con = "Server=(local);Database=Konten;Trusted_Connection=True;"; string cmd = "SELECT Vorname,Nachname,PersonenID FROM Person.Contact WHERE Nachname=" + textBox1.Text; SqlConnection connection = new SqlConnection(con); SqlCommand command = new SqlCommand(cmd, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader();
Der Compiler gibt auch keine Fehlermeldung raus, allerdings stürzt das Programm ab, sobald auf die Datenbank zugegriffen werden soll.
Die Datenbank wurde mit SQL Server 2008 R2 erstellt.
Hoffe ihr könnt was damit anfangen...
Vielen Dank und Grüße
-
Hi,
du solltest zuerst einmal deine Verbindungsanfrage in ein try..catch einbetten, dann bekommst du über die Exception schonmal Informationen darüber was genau schief gegangen ist.
Ansonsten ist mir nicht klar was du damit meinst, dass deine Datenbank unter D:/Konten.mdf abgespeichert ist. Läuft denn der SQL Server überhaupt? An deinem Connection String sieht für mich das "Database=Konten" komisch aus, das sollte glaube ich eher "Initial Catalog=Konten" heißen.
KaPtainCugel
-
Ok, also der sagt mir jetzt SqlExeception wurde nicht behandelt.
Ungültiger Spaltenname 'Wynands'
War mir nicht sicher ob der Verbindungsstring so richtig war, weil ja bei der Express - Version den genauen Pfad angeben muss.
Hab den string jetzt geändert in:
try { string con = "Data Source=WYNANDS-PC;Initial Catalog=Konten;Integrated Security=True"; string cmd = "SELECT Vorname,Nachname,PersonenID FROM dbo.Konto WHERE Nachname=" + textBox1.Text; SqlConnection connection = new SqlConnection(con); SqlCommand command = new SqlCommand(cmd, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); if (reader.Read()) { grid1.DataContext = new Person((string)reader["Vorname"], (string)reader["Nachname"], (string)reader["PersonenID"]); } connection.Close(); } catch { }
Hoffe das mit dem try...catch ist so richtig...
-
Mit catch fängst du alle Fehler, ohne aber die entsprechende Exception zu bekommen. Du solltest eher ein catch(Exception ex) machen, dann kannst du über Console.WriteLine(ex.Message) die Fehlermeldung auf der Konsole ausgeben.
Zu deinem Fehler: Wahrscheinlich hast du in deiner Textbox Wynands als Namen eingegeben, da du aber das Ganze nicht als String maskiert hast in deiner SQL Anweisung versucht er eine Spalte namens Wynands zu finden. Du musst den String mit '' escapen:string cmd = "SELECT Vorname,Nachname,PersonenID FROM dbo.Konto WHERE Nachname= '" + textBox1.Text + "'";
KaPtainCugel
-
Dass man immer wieder auf SQL-Parameter hinweisen muß, ist eigentlich erschreckend!
Und ein Fangen aller Exceptions, ohne sie zu behandeln, ist auch ein "NoGo"!
-
Vielen Dank für deine Hilfe, genau das war der Fehler, jetzt läuft es locker leicht
@Th69
Auch an dich vielen Dank zu den SQL-Parametern, da das mein erstes Testprojekt mit Datenbankanbindung war, weiß ich ja jetzt wo ich bei dem Fehler nach gucken kann.Grüße