C# – How to drop sqlite table after it already exists in c#

c++sqlite

So my error is: table chang9 already exists.

I googled around, and people said to drop the table after you run it, hence i used (with no luck):

 sqlite_cmd.CommandText = " DROP Table 'chang9'";

Maybe there's a syntax issue with it? But Here is my full code:(note: drop table section is at end of code)

 private void button4_Click(object sender, EventArgs e)
    {
        // We use these three SQLite objects:
        SQLiteConnection sqlite_conn;
        SQLiteCommand sqlite_cmd;

        // create a new database connection: // Maybe error here - video was different
        sqlite_conn = new SQLiteConnection(@"Data Source=database.db;Version=3;");

        // open the connection:
        sqlite_conn.Open();

        // create a new SQL command:
        sqlite_cmd = sqlite_conn.CreateCommand();

        // Let the SQLiteCommand object know our SQL-Query:
        sqlite_cmd.CommandText = "CREATE TABLE chang9 (Seq text, Field text, Desc text, Len text, Dec text, Typ text, Percnt text, Pop text, Alzero text, MaxLen text );";

        // Now lets execute the SQL                                                                                  
        sqlite_cmd.ExecuteNonQuery();

        sqlite_cmd.CommandText = "INSERT INTO chang9 (Seq, Field, Desc, Len, Dec, Typ, Percnt, Pop, Alzero, MaxLen) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10)";
        sqlite_cmd.Parameters.AddWithValue("@p1", 6);  // dummy initial values 
        sqlite_cmd.Parameters.AddWithValue("@p2", 878); 
        sqlite_cmd.Parameters.AddWithValue("@p3", 56);
        sqlite_cmd.Parameters.AddWithValue("@p4", 6);
        sqlite_cmd.Parameters.AddWithValue("@p5", 546);
        sqlite_cmd.Parameters.AddWithValue("@p6", 565);
        sqlite_cmd.Parameters.AddWithValue("@p7", 568);
        sqlite_cmd.Parameters.AddWithValue("@p8", 526);
        sqlite_cmd.Parameters.AddWithValue("@p9", 586);
        sqlite_cmd.Parameters.AddWithValue("@p10", 526);


        for (int i = 0; i < 500 ; i+= 10) // Filling SQlite table rows and columns with values from our list 
        {


            sqlite_cmd.Parameters.AddWithValue("@p1", list[i]);
            sqlite_cmd.Parameters.AddWithValue("@p2", list[i+1]);
            sqlite_cmd.Parameters.AddWithValue("@p3", list[i + 2]);
            sqlite_cmd.Parameters.AddWithValue("@p4", list[i + 3]);
            sqlite_cmd.Parameters.AddWithValue("@p5", list[i + 4]);
            if (i > 490)
                break; 
            sqlite_cmd.Parameters.AddWithValue("@p6", list[i + 5]);
            sqlite_cmd.Parameters.AddWithValue("@p7", list[i + 6]);
            sqlite_cmd.Parameters.AddWithValue("@p8", list[i + 7]);
            sqlite_cmd.Parameters.AddWithValue("@p9", list[i + 8]);
            sqlite_cmd.Parameters.AddWithValue("@p10", list[i + 9]);
            sqlite_cmd.ExecuteNonQuery();

        }

        sqlite_cmd.CommandText = " DROP Table 'chang9'";
        sqlite_conn.Close();

    }

Best Solution

You are not executing your command after you set the text to your drop table statement:

sqlite_cmd.CommandText = " DROP Table 'chang9'";
sqlite_conn.Close();

As such the table is never being dropped. When you attempt to run the method again the table already exists and you get the error you're seeing. You need to add a line like sqlite_cmd.ExecuteNonQuery(); after setting the command text to drop your table.

sqlite_cmd.CommandText = " DROP Table 'chang9'";
sqlite_conn.Close();
sqlite_cmd.ExecuteNonQuery();