C#操作SQLite执行SELECT语句时触发SQL逻辑错误求助
解决SQLite LIKE查询语法错误及SQL注入问题
错误原因:你拼接的SQL语句存在语法错误,当输入't'时,实际生成的SQL是:
SELECT * FROM Customers WHERE name like ''t这里字符串没有正确闭合,而且LIKE查询缺少通配符,导致SQL解析报错。另外直接拼接用户输入还会引发SQL注入风险,绝对不能这么写。
正确解决方法:使用参数化查询
参数化查询能自动处理字符串闭合,同时避免SQL注入,代码修改如下:// 构造带参数的SQL语句,%是LIKE的通配符,匹配任意字符 string sqlQuery = "SELECT * FROM Customers WHERE name LIKE @Name"; SQLiteCommand sqlCmd = new SQLiteCommand(sqlQuery, m_dbConnection); // 添加参数,值为带通配符的用户输入 sqlCmd.Parameters.AddWithValue("@Name", $"%{textBox1.Text}%"); // 执行查询并绑定到DataGridView SQLiteDataReader reader = sqlCmd.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(reader); dataGridView1.DataSource = dt;额外说明:
%是SQLite LIKE查询的通配符,%t%表示匹配包含't'的所有name值;如果要匹配以't'开头的内容用t%,以't'结尾用%t。- 参数化查询会自动处理字符串的引号转义,不会出现语法错误,同时能防止恶意用户输入破坏数据库。
内容的提问来源于stack exchange,提问作者Kevin Biggs
相关产品推荐
相关产品推荐

