You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#应用中使用带WHERE子句的INSERT语句时出现语法错误求助

解决SQLite INSERT...SELECT在C#中的语法错误问题

我一眼就找到了问题的关键——你创建SQLiteCommand的方式出错了!

错误根源

你当前代码里的这一行是核心问题:

SQLiteCommand cmd = new SQLiteCommand(connectionstring);

SQLiteCommand的这个构造函数接受的参数是SQL命令文本,而不是连接字符串。你把连接字符串传进去,相当于让命令执行的是你的连接字符串本身,这必然会触发语法错误,后续再设置CommandText也没法完全覆盖这个初始错误状态。

修复后的完整代码

把命令的创建方式改成下面这样,同时补上资源释放的最佳实践:

private void button1_Click(object sender, EventArgs e)
{
    using (SQLiteConnection con = new SQLiteConnection(connectionstring))
    {
        string insertQuery = @"INSERT INTO ALARM (ALARM_ID, ALARM) 
                              SELECT 1, 'TEMP' 
                              WHERE NOT EXISTS(SELECT FLAG FROM ALARM WHERE FLAG = 0)";
        
        // 正确创建命令:直接传入SQL语句和连接对象
        using (SQLiteCommand cmd = new SQLiteCommand(insertQuery, con))
        {
            con.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

额外说明

  1. 我用using语句包裹了SQLiteCommand,确保命令对象能被正确释放,避免资源泄漏,这是数据库操作的最佳实践。
  2. 你的SQL语句本身是完全有效的(毕竟在SQLite浏览器里能正常运行),问题完全出在C#代码对SQLiteCommand的初始化逻辑上。
  3. 如果修改后仍有问题,可以再确认下connectionstring的正确性,但从你的描述来看这部分应该没问题。

这样调整后,代码应该就能正常执行你想要的插入逻辑了。

内容的提问来源于stack exchange,提问作者R-T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:54:12