SQLite:如果表不存在,则创建表并添加一行

4

我在SQLite查询中遇到了问题。由于语法错误,我无法实现我的目标。我试图检查表accounts是否存在,如果不存在,则创建它并添加一行。我尝试了几种代码,最后一个是这个:

IF NOT EXISTS (SELECT * FROM account) THEN
   BEGIN
       CREATE TABLE account (rowID INT, user VARCHAR(20), pass VARCHAR(20))
       INSERT INTO account (rowID, user, pass) VALUES (0, '', '')
   END

我正在使用C#和SQLite 3。

我可以使用以下代码使其正常工作:

CREATE TABLE IF NOT EXISTS account (rowID INT, user VARCHAR(20), pass VARCHAR(20))

但我不知道如何添加插入新行的部分。只有在创建表时才能插入新行,因此我无法在两个查询中完成工作。

2个回答

3

试一下下面的代码:

 using (SQLiteConnection con = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;"))
using (SQLiteCommand command = con.CreateCommand())
{
    con.Open();
    command.CommandText = "SELECT name FROM sqlite_master WHERE name='account'";
    var name = command.ExecuteScalar();

    // check account table exist or not 
    // if exist do nothing 
    if (name != null && name.ToString() == "account")
        return;
    // acount table not exist, create table and insert 
    command.CommandText = "CREATE TABLE account (rowID INT, user VARCHAR(20), pass VARCHAR(20))";
    command.ExecuteNonQuery();
    command.CommandText = "INSERT INTO account (rowID, user, pass) VALUES (0, '', '')";
    command.ExecuteNonQuery();
}

但如果表已经存在,如何避免插入? - Steve
@Steve哦,希望ExecuteNonQuery的返回值可以使用。 - Damith
1
"CREATE TABLE IF NOT EXISTS account (rowID INT, user VARCHAR(20), pass VARCHAR(20))"即使表已创建,始终返回0。 - Sebastian

0
using (SQLiteConnection con = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;"))
using (SQLiteCommand command = con.CreateCommand())

    con.Open();
    command.CommandText = "SELECT name FROM sqlite_master WHERE name='account'";
    var name = command.ExecuteScalar();

    // check account table exist or not 
    // if exist do nothing 
    if (name == null)
       {
        // account table not exist, create table and insert 
          command.CommandText = "CREATE TABLE account (rowID INT, user VARCHAR(20), pass   VARCHAR(20))";
          command.ExecuteNonQuery();
          command.CommandText = "INSERT INTO account (rowID, user, pass) VALUES (0, '', '')";
          command.ExecuteNonQuery();
       }

你的代码看起来很正常,但是考虑到教育的目的,请考虑向原始帖子的作者解释一下 :D - Maritim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接