Verbinden mit einer Accessdatenbank im Programmverzeichnis
-
Hi,
ich versuch gerade eine Verbindung zu einer Accessdatei zu machen.
Die Accessdatei liegt im Programmverzeichnis der Anwendung, das Arbeitsverzeichnis ändert sich laufend.string conStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=database.mdb";
So funktioniert die Verbindung beim Formload solange sich das arbeitsverzeichnis nicht geändert hat. Aber sobald es sich ändert bekomme ich die Meldung, dass die Datei nicht gefunden werden kann. Ist ja auch klar..
Nu dachte ich daran es an den Application.ExecutablePath zu binden
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\database.mdb";
Dann bringt er mir aber schon beim Formload die Meldung, dass die Datei nicht gefunden werden kann.
Welche Möglichkeiten gibt es noch?
Gruß SkySurfer
-
Application.StartupPath
-
Ok, dass hat jetzt funktioniert. Danke.
Nun versuche ich aber Daten in eine Tabelle zu schreiben:
string insSQL = "INSERT INTO Songs (Filename, Titel, Artist, Spieldauer, Jahr, Genre, Kommentar) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7)"; cmd = new OleDbCommand(insSQL, conn); cmd.Parameters.Add("@p1", OleDbType.VarChar, 255, "Filename"); cmd.Parameters.Add("@p2", OleDbType.VarChar, 80, "Titel"); cmd.Parameters.Add("@p3", OleDbType.VarChar, 80, "Artist"); cmd.Parameters.Add("@p4", OleDbType.VarChar, 80, "Spieldauer"); cmd.Parameters.Add("@p5", OleDbType.Integer, 4, "Jahr"); cmd.Parameters.Add("@p6", OleDbType.VarChar, 50, "Genre"); cmd.Parameters.Add("@p7", OleDbType.VarChar, 255, "Kommentar"); da.InsertCommand = cmd; DataRow rw = dt.NewRow(); rw["Filename"] = fullfile; rw["Titel"] = mp3.Title; rw["Artist"] = mp3.Artist; rw["Spieldauer"] = mp3.Duration; rw["Jahr"] = mp3.Year; rw["Genre"] = mp3.Genre; rw["Kommentar"] = mp3.Comments; dt.Rows.Add(rw); conn.Open(); int ret= da.Update(dt); MessageBox.Show(Convert.ToString(ret)); conn.Close();
ret liefert mir als wert 1.
Die Daten werden auch im DataGridView angezeigt aber in der Tabelle der Datenbank kommt leider nichts an woran kann das liegen?
-
string insSQL = "INSERT INTO Songs (Filename, Titel, Artist, Spieldauer, Jahr, Genre, Kommentar) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7)"; cmd = new OleDbCommand(insSQL, conn); cmd.Parameters.Add("@p1", OleDbType.VarChar, 255, "Filename"); cmd.Parameters.Add("@p2", OleDbType.VarChar, 80, "Titel"); cmd.Parameters.Add("@p3", OleDbType.VarChar, 80, "Artist"); cmd.Parameters.Add("@p4", OleDbType.VarChar, 80, "Spieldauer"); cmd.Parameters.Add("@p5", OleDbType.Integer, 4, "Jahr"); cmd.Parameters.Add("@p6", OleDbType.VarChar, 50, "Genre"); cmd.Parameters.Add("@p7", OleDbType.VarChar, 255, "Kommentar"); cmd.Parameters["@Filename"].Value = fullfile; cmd.Parameters["@Titel"].Value = mp3.Title; cmd.Parameters["@Artist"].Value = mp3.Artist; cmd.Parameters["@Spieldauer"] = mp3.Duration; cmd.Parameters["@Jahr"] = mp3.Year; cmd.Parameters["@Genre"] = mp3.Genre; cmd.Parameters["@Kommentar"] = mp3.Comments; conn.Open(); cmd.ExecuteNonQuery(); // danach wieder per Fill DataSet aktualisieren conn.Close();
-
Ich würde empfehlen mehr mit den Adaptern zu arbeiten, im Hinblick auf das DataSet!
Dort kannst Du das SQL auch noch dynamisch anpassen. Die kümmern sich auch
automatisch um Open und Close der DB-Verbindung.
-
sclearscreen schrieb:
string insSQL = "INSERT INTO Songs (Filename, Titel, Artist, Spieldauer, Jahr, Genre, Kommentar) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7)"; cmd = new OleDbCommand(insSQL, conn); cmd.Parameters.Add("@p1", OleDbType.VarChar, 255, "Filename"); cmd.Parameters.Add("@p2", OleDbType.VarChar, 80, "Titel"); cmd.Parameters.Add("@p3", OleDbType.VarChar, 80, "Artist"); cmd.Parameters.Add("@p4", OleDbType.VarChar, 80, "Spieldauer"); cmd.Parameters.Add("@p5", OleDbType.Integer, 4, "Jahr"); cmd.Parameters.Add("@p6", OleDbType.VarChar, 50, "Genre"); cmd.Parameters.Add("@p7", OleDbType.VarChar, 255, "Kommentar"); cmd.Parameters["@Filename"].Value = fullfile; cmd.Parameters["@Titel"].Value = mp3.Title; cmd.Parameters["@Artist"].Value = mp3.Artist; cmd.Parameters["@Spieldauer"].Value = mp3.Duration; cmd.Parameters["@Jahr"].Value = mp3.Year; cmd.Parameters["@Genre"].Value = mp3.Genre; cmd.Parameters["@Kommentar"].Value = mp3.Comments; conn.Open(); cmd.ExecuteNonQuery(); // danach wieder per Fill DataSet aktualisieren conn.Close();
Pack vorsichtshalber noch try/catch drumrum