如何删除c#中已存在的sqlite表后

时间:2013-11-01 17:49:25

标签: c# sqlite

所以我的错误是:表格chang9已经存在。

我在谷歌上搜索,人们说你跑完后放下桌子,所以我用了(没有运气):

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

也许它有语法问题?但这是我的完整代码: (注意:drop table部分位于代码末尾)

 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();

    }

3 个答案:

答案 0 :(得分:2)

你的问题在这里:

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 );";

创建表时,它已经存在,因此您无法再次创建它。

您认为在启动此代码时该表不存在,但它已经存在。

答案 1 :(得分:2)

将文本设置为drop table语句后,您没有执行命令:

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

因此,表永远不会丢弃。当您再次尝试运行该方法时,该表已经存在,您将收到您正在查看的错误。在设置命令文本后,您需要添加类似sqlite_cmd.ExecuteNonQuery();的行。

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

答案 2 :(得分:1)

使用以下命令

drop table if exists Table_Name