2014-02-16 6 views
2

У меня проблема с запросом в SQLite. Я не могу достичь своей цели, потому что получаю синтаксическую ошибку. Я пытаюсь проверить, существуют ли учетные записи таблицы, а если нет, создайте его и добавьте строку. Я попробовал несколько кодов, а последний был таков:SQLite: создать таблицу и добавить строку, если таблица не существует

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 

Я использую SQLite 3 с C#

я могу заставить его работать со следующим кодом:

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

Но я не знаю, как добавить сюда часть вставки новой строки. Строка должна быть вставлена ​​только в том случае, если таблица создана в данный момент, поэтому я не могу выполнить работу в 2 запросах.

ответ

2

попробовать ниже код:

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(); 
} 
+0

Но если таблица существует, как избежать вставки? – Steve

+0

@Steve О, надеюсь, что значение возврата ExecuteNonQuery может быть использовано – Damith

+0

«CREATE TABLE If NOT EXISTS account (rowID INT, пользователь VARCHAR (20), pass VARCHAR (20))» всегда возвращает 0, даже когда таблица создается – Sebastian

Смежные вопросы