使用C# System.Data.SQLite插入数据时遇SQL逻辑错误求助
解决SQLite插入数据时的SQL语法错误问题
你遇到的SQL logic error near "hpi_caseid": syntax error错误,核心原因是INSERT语句的语法不符合SQL标准,下面一步步帮你解决:
1. 修正INSERT语句的语法
你的原插入语句缺少了必要的括号,导致SQLite无法正确解析列名和值的对应关系:
原错误代码:
cnn.Execute("INSERT INTO CasesData hpi_caseid VALUES @hpi_caseid", CasesData);
修正后的正确语句:
cnn.Execute("INSERT INTO CasesData (hpi_caseid) VALUES (@hpi_caseid)", CasesData);
为什么这样改?
SQL的INSERT语法规则要求:
- 如果指定要插入的列名,必须用
()将列名包裹起来 - VALUES子句中的参数也需要用
()包裹,明确标识这是一个值集合
缺少这些括号会让SQLite引擎误解语句结构,直接触发语法错误。
2. 修正App.config中的Provider配置
你的连接字符串里使用了System.Data.SqlClient作为providerName,这是针对SQL Server的驱动,SQLite需要使用专门的驱动:
原错误配置:
<add name="Default" connectionString="Data Source=C:\Users\mansourm\Documents\Visual Studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\hptest.db; Version=3;" providerName="System.Data.SqlClient"/>
修正后:
<add name="Default" connectionString="Data Source=C:\Users\mansourm\Documents\Visual Studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\hptest.db; Version=3;" providerName="System.Data.SQLite"/>
虽然这个配置错误不是当前语法错误的直接原因,但后续可能会引发连接或操作异常,建议提前修正。
3. (推荐)优化CaseModel的结构
你的CaseModel使用了公共字段,虽然Dapper可以识别,但.NET开发中更推荐使用属性来封装数据,这样能避免潜在的映射问题:
原代码:
public class CaseModel { public long hpi_caseid; }
优化后:
public class CaseModel { public long hpi_caseid { get; set; } }
完成以上修改后,重新运行代码,应该就能成功插入数据了。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

