0

我对两个不同的表用户表和区域表的查询产生了一个问题:

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 变量,例如“admin”

它是说没有为一个或两个参数指定值。我检查了所有表格列和数据。相同的查询独立于 Access 数据库运行。

我在这里执行有什么问题吗?

4

1 回答 1

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是最糟糕的。使用参数化查询应该避免所有这些问题

于 2013-05-14T12:23:09.963 回答