【问题标题】:SQLite syntax error inside of command: 'SQL logic error near "=": syntax error' [closed]命令内部的 SQLite 语法错误:'“=”附近的 SQL 逻辑错误:语法错误'[关闭]
【发布时间】:2021-10-13 21:10:19
【问题描述】:

我不断收到异常

System.Data.SQLite.SQLiteException: 'SQL 逻辑错误 “=”附近:语法错误'

我不知道为什么或是什么导致它:(

我的代码如下

SQLiteConnection c = new SQLiteConnection("Data Source = StuTchInfo.db");
SQLiteCommand cmd = new SQLiteCommand(c);
cmd.CommandText = "SELECT *" +
    "FROM tblTeachers" +
   $"WHERE teacherID = '{idField.Text.ToString()}'";
c.Open();
SQLiteDataReader r = cmd.ExecuteReader();

//code processing data from data reader
        

并且在最后一行抛出异常。 idField.Text 是一个字符串值,我已经尝试过使用 idField.Text.ToString() 但它仍然会引发相同的错误。有什么想法吗?

【问题讨论】:

标签: c# sqlite


【解决方案1】:

您需要在字符串中使用一些空格。此外,您可以使用string interpolation 获得one-liner 代码。

cmd.CommandText = $"SELECT * FROM tblTeachers WHERE teacherID = '{idField.Text.ToString()}'";

【讨论】:

  • 考虑到我设法忘记了字符串连接不会自动添加空格,我可能会从现在开始至少尝试这样做,直到我更习惯 SQL 命令为止
【解决方案2】:

您需要添加空间。

cmd.CommandText = "SELECT * " +
    "FROM tblTeachers " +
    $"WHERE teacherID = '{idField.Text.ToString()}'";

【讨论】:

  • 哦,哇,原来如此,我忘记了字符串连接不会自动放置空格
  • Sql 不会关心SELECT *FROM,顺便说一句
  • @CaiusJard 很高兴知道,但无论如何,最好有这个空间以提高可读性。
  • 逐字字符串更容易,前面加上@,然后你可以使用换行符
【解决方案3】:

您的字符串连接导致 sql 包含 tblTeachersWHERE

如果您想保持多行格式以提高可读性,您可以使用 @string 放弃字符串 concat

cmd.CommandText = @"
  SELECT *
  FROM tblTeachers
  WHERE teacherID = @name";

//you'll need this too; gives a value to the above parameter
cmd.Parameters.AddWithValue("@name", idField.Text);

您还可以调查资源设施(右键单击项目名称并选择属性,然后选择左侧的资源,如果您的项目没有,请“单击那里”);它允许您编写像大型 SQL 一样的长字符串,而不会使您的代码与它们混淆。代码如下:

cmd.CommandText = Properties.Resources.SelectFromTeachersWhereNameIs;

你的资源设计师就像:


作为旁注,研究如何参数化您的查询(我在上面使用@name 完成了此操作),因为即使您解决了这个问题,只要有人在文本框中输入',您的代码就会再次爆炸,@987654322 @

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2015-03-25
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多