02. december 2010 - 10:08
Der er
7 kommentarer og 1 løsning
SQLite hjælp
Hej, Jeg har installeret csharp-sqlite_3_6_23 og added den som reference med using System.Data.SQLite; Følgende kode giver dog denne fejl: "Error: No connection associated with this command" private void treeView1_MouseClick(object sender, MouseEventArgs e) { if (treeView1.SelectedNode.Text == "Node1") { this.richTextBox1.Text = ""; SQLiteDataReader dataReaderSelect = GetSQLData(treeView1.SelectedNode.Text); if (dataReaderSelect != null && dataReaderSelect.HasRows) { while (dataReaderSelect.Read()) { string txt = dataReaderSelect[0].ToString() + "\n"; txt += dataReaderSelect[1].ToString() + "\n"; txt += dataReaderSelect[2].ToString() + "\n"; txt += dataReaderSelect[3].ToString() + "\n"; txt += dataReaderSelect[4].ToString() + "\n"; MessageBox.Show(txt); } } } } public SQLiteDataReader GetSQLData(string name) { SQLiteDataReader dataReader = null; try { SQLiteConnection connectionString = new SQLiteConnection("Data Source=" + Path.GetDirectoryName(Application.ExecutablePath) + "\\database.s3db;Version=3;New=False;Compress=True"); using (SQLiteConnection conn = new SQLiteConnection(connectionString)) { conn.Open(); SQLiteCommand cmd = new SQLiteCommand(); cmd.CommandText = "select * from myTable"; cmd.CommandTimeout = 120; dataReader = cmd.ExecuteReader(); } } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message.ToString() + "\n\n"); } return dataReader; } Hvad mangler jeg? :-/
Annonceindlæg fra Computerworld
Gefion skaber fremtidens AI
Supercomputeren Gefion er Danmarks nye AI-kraftværk og skal sikre, at både forskning og virksomheder kan være med i den teknologiske front.
14. august 2025
02. december 2010 - 10:13
#3
SqlCommand tager det som parameter som dette: SqlCommand cmd = new SqlCommand("select * from table", conn); eller burde du også kunne gøre sådan her: cmd.Connection = conn;
02. december 2010 - 10:29
#4
Nåe ja.. cmd.Connection = conn; virker.. men får stadig denne fejl: {"Connection was closed, statement was terminated"} på denne linie: if (dataReaderSelect != null && dataReaderSelect.HasRows) ..??
02. december 2010 - 10:32
#5
Fordi din: using (SQLiteConnection conn = new SQLiteConnection(connectionString)) Lukker din SQL connection, iden du reelt set har hentet data fra databasen. mvh
02. december 2010 - 10:51
#7
Pas ... Jeg har aldrig rigtig prøvet at lave min egen ORM før, så jeg ved ikke hvad best practice er her. Men du må i hvert fald ikke lukke din forbindelse, før du har hentet data ud :-) og svar.
02. december 2010 - 11:01
#8
Klart klart, det var lige noget med skoven og alle træerne hehe.. tak for hjælpen :-) Smider lige resultatet (som virker) i tilfælde af at andre kunne drage nytte af det senere: private void treeView1_MouseClick(object sender, MouseEventArgs e) { if (treeView1.SelectedNode.Text == "Node1") { this.richTextBox1.Text = ""; DataTable dt = GetSQLData(treeView1.SelectedNode.Text); foreach (DataRow myRow in dt.Rows) { string txt = myRow[0].ToString() + "\n"; txt += myRow[1].ToString() + "\n"; txt += myRow[2].ToString() + "\n"; txt += myRow[3].ToString() + "\n"; MessageBox.Show(txt); } } } public DataTable GetSQLData(string name) { SQLiteDataReader dataReader = null; DataTable dt = new DataTable(); try { SQLiteConnection connectionString = new SQLiteConnection("Data Source=" + Path.GetDirectoryName(Application.ExecutablePath) + "\\database.s3db;Version=3;New=False;Compress=True"); using (SQLiteConnection conn = new SQLiteConnection(connectionString)) { conn.Open(); SQLiteCommand cmd = new SQLiteCommand(); cmd.Connection = conn; cmd.CommandText = "select * from myTable"; cmd.CommandTimeout = 120; dataReader = cmd.ExecuteReader(); dt.Load(dataReader); dataReader.Close(); cmd.Connection.Close(); } } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message.ToString() + "\n\n"); } return dt; }