10

テーブル内のレコードが既に存在するかどうかを確認しようとしています。

どうすればそれができますか?

私はすでに次のコードを書いています:

string dbName = "Data Source=searchindex.db";
SQLiteConnection con = new SQLiteConnection(dbName);
con.Open();
SQLiteCommand cmd = new SQLiteCommand(con);

// If this sql request return false
cmd.CommandText = "SELECT rowid FROM wordlist WHERE word='word'"; 
cmd.ExecuteNonQuery();

// then add record in table
cmd.CommandText = "INSERT INTO wordlist(word) VALUES ('word')";
4

3 に答える 3

21

そのレコードが存在するかどうかを確認するには、コードを簡素化できます

cmd.CommandText = "SELECT count(*) FROM wordlist WHERE word='word'"; 
int count = Convert.ToInt32(cmd.ExecuteScalar());
if(count == 0)
{
    cmd.CommandText = "INSERT INTO wordlist(word) VALUES ('word')"; 
    cmd.ExecuteNonQuery();
}

ExecuteScalarは、クエリによって返された最初の行の最初の列を返します。(リンクは SqlServer 用ですが、SQLiteCommand はIDbCommand
インターフェイス を実装する必要があるため、SQLite でも同じです)

使用する別のアプローチは次のとおりです

cmd.CommandText = "INSERT INTO wordlist (word) 
                   SELECT ('word')
                   WHERE NOT EXISTS 
                       (SELECT 1 FROM wordlist WHERE word = 'word');";
cmd.ExecuteNonQuery();

2 つではなく 1 つのクエリを使用するため、これはさらに優れています (ただし、ローカル データベースの違いは最小限に抑える必要があります)。

于 2013-03-28T14:14:22.587 に答える
0
        insert into wordlist(word)
        select 'foo' 
        where not exists ( select 1 from wordlist where word = 'foo')
于 2013-03-28T14:49:32.430 に答える