C# 检查Sqlite+C中是否存在记录

C# 检查Sqlite+C中是否存在记录,c#,sqlite,c#-4.0,C#,Sqlite,C# 4.0,我正在检查表中是否已经存在记录 我怎么能这么做 我已经编写了以下代码: 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 = "SEL

我正在检查表中是否已经存在记录

我怎么能这么做

我已经编写了以下代码:

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

要检查该记录是否存在,可以简化代码

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();
}
将返回查询返回的第一行的第一列。 该链接是针对SqlServer的,但对于SQLite是相同的,因为SQLiteCommand应该实现该接口

另一种使用方法如下

cmd.CommandText = "INSERT INTO wordlist (word) 
                   SELECT ('word')
                   WHERE NOT EXISTS 
                       (SELECT 1 FROM wordlist WHERE word = 'word');";
cmd.ExecuteNonQuery();
这甚至更好,因为您使用一个查询,而不是两个查询,尽管本地数据库中的差异应该是最小的

如果您使用的是sqlite net pcl,您可以编写以下代码

        insert into wordlist(word)
        select 'foo' 
        where not exists ( select 1 from wordlist where word = 'foo')
我有几个表的基类,其中有一个RowExists方法。 相关源代码如下所示:

public abstract class BaseSQLiteAccess
{
    protected SQLiteConnection _databaseConnection;
    protected String TableName { get; set; }

    //...

    protected bool RowExists(int id) 
    {
        bool exists = false;
        try
        {
            exists = _databaseConnection.ExecuteScalar<bool>("SELECT EXISTS(SELECT 1 FROM " + TableName + " WHERE ID=?)", id);
        }
        catch (Exception ex)
        {
            //Log database error
            exists = false;
        }
        return exists;
    }
}

我搞不懂你在问什么!您可以在不存在的位置添加。。。。insert语句的条件。如果此sql请求返回false。。。然后在表中添加记录您的目标是防止重复,仅在不存在的情况下插入单词,对吗?谢谢Tim。我最初的目标是检查表中是否存在记录,然后提取最后一个rowid,否则在表中添加一条记录并提取最后一个rowid。为什么在sql请求insead of*?…中使用1?否则,请在表中添加一条记录并提取最后一个rowid。如果单词还不存在,则上面的代码没有提取最后一个rowid。所以你想插入。。。如果不存在,则提取rowid。为什么选择1而不是选择*?Select col或Select 1的效率略高于选择每一列,并且在测试是否存在时不需要多个列。比如说,如果你有很多专栏,并且在一个循环中执行生存测试,那么效率的边际提高可以说是真正的金钱。OP问题的精彩答案。我的搜索结束了。