使用OleDb执行SQL查询时遇OleDbException错误求助
问题解决:OleDbException "No value given for one or more required parameters."
错误原因
你当前通过字符串拼接生成SQL语句的写法存在两个核心问题:
- 存在严重的SQL注入风险,若
receivedMessage包含特殊字符(比如单引号)会直接破坏SQL语法; - OleDb解析拼接后的SQL时,可能将未正确识别的内容判定为未赋值的参数,触发该错误——哪怕当前
receivedMessage是"admin",这种写法本身就不稳定。
修复方案:使用参数化查询
改用参数化查询是解决这类问题的标准做法,同时能彻底避免SQL注入风险:
OleDbCommand cmd = new OleDbCommand(); cmd.Connection = connection; connection.Open(); // 使用?作为参数占位符(OleDb按顺序匹配参数,无需命名) cmd.CommandText = "SELECT [Username] from [TbLeaderBoard] WHERE [Title] = ?"; // 添加参数值,类型会自动匹配 cmd.Parameters.AddWithValue("@Title", receivedMessage); OleDbDataReader reader = cmd.ExecuteReader();
额外检查项
如果修改后仍报错,请确认:
- 数据库表
TbLeaderBoard中确实存在Title字段,字段名拼写完全一致(部分数据库对大小写敏感); - 当前数据库连接字符串指向的是正确的数据库实例。
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

