Avatar billede jackass- Nybegynder
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? :-/
Avatar billede jackass- Nybegynder
02. december 2010 - 10:10 #1
I øvrigt også ADO.NET 2.0 Provider for SQLite installeret.
Avatar billede Syska Mester
02. december 2010 - 10:12 #2
Du skal assign din connection til dit command object.
Avatar billede Syska Mester
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;
Avatar billede jackass- Nybegynder
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)

..??
Avatar billede Syska Mester
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
Avatar billede jackass- Nybegynder
02. december 2010 - 10:34 #6
Ah ja natürlich :-/

Er det bedre at returnere en DataTable fx i stedet for SQLiteDataReader?
Avatar billede Syska Mester
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.
Avatar billede jackass- Nybegynder
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;
        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester