我对两个不同的表用户表和区域表的查询产生了一个问题:
cmd.CommandText = "SELECT zone_name, zone_difference FROM user_master INNER JOIN zones on user_master.zone_id = zones.ID WHERE user_master.uname LIKE " & """" & usr_gl & """"
Dim reader_q As OleDbDataReader
reader_q = cmd.ExecuteReader()
此处,区域名称和区别来自区域表和zone_id(来自客户)和ID(区域)是相关的。此外,用户名(uname)来自外部作为usr_gl变量,例如“管理员”
这是说一个或两个参数没有给出值。我检查了所有表格列和数据。相同的查询独立于Access数据库运行。
我在这里执行有什么不对吗?
答案 0 :(得分:0)
是的,您正在尝试连接字符串,这是代码中的NO-NO
cmd.CommandText = "SELECT zone_name, zone_difference FROM " & _
"user_master INNER JOIN zones on user_master.zone_id = zones.ID " & _
"WHERE user_master.uname LIKE ?"
cmd.Parameters.AddWithValue("@p1", usr_gl)
Dim reader_q As OleDbDataReader
reader_q = cmd.ExecuteReader()
字符串连接被认为是一种不好的做法,因为可能会出现许多问题 正确的字符串格式(带引号,小数,日期)是第一个问题,但Sql Injection是最糟糕的。使用参数化查询应该避免所有这些问题