数据适配器故障
Data adapter troubles
当我 运行 填充我数据的代码行时 table 说没有为一个或多个参数给出值
Order = New OleDb.OleDbDataAdapter("SELECT * FROM Orders WHERE
Driver_ID = " & ID, DBREF)
Order.Fill(dataODtable)
DGVorders.DataSource = dataODtable
代码是这样写的:
An unhandled exception of type 'System.Data.OleDb.OleDbException'
occurred in System.Data.dll
下面是 link 数据库的图像,table 它正在引用。
(数据库订单table)
如果我尝试 运行 没有 where 语句的代码,它 运行 不会崩溃。
字段 DRIVER_ID 显然是一个字符串,因此您需要将要用于 WHERE 子句的值用单引号引起来。
但由于一长串原因(Sql 注入、解析错误、不兼容语言环境的自动类型转换),这是错误的。
所以你真的需要尽快开始使用参数化查询来避免这些失误
Dim cmdText = "SELECT * FROM Orders WHERE Driver_ID = @drvID"
Order = New OleDb.OleDbDataAdapter(cmdText, DBREF)
Order.SelectCommand.Parameters.Add("@drvID", OleDbType.VarWChar).Value = ID
Order.Fill(dataODtable)
DGVorders.DataSource = dataODtable
现在不再构建查询将字符串片段连接在一起(sql 注入黑客的主要来源)但是您创建了一个正确类型的参数对象并将其传递给将使用它的数据库引擎需要的时候。
另一个好处是您获得的代码更清晰。在这种情况下,可能不是很明显,但是对于更复杂的查询,您将更清楚地了解您要对数据库执行的操作。
你可以这样试试:
Order = New OleDb.OleDbDataAdapter("SELECT * FROM Orders WHERE
Driver_ID = '"& ID &"'", DBREF)
Order.Fill(dataODtable)
DGVorders.DataSource = dataODtable
也许这就是问题所在。
如果 Driver_ID
是字母数字列,select 查询应该是 SELECT * FROM Orders WHERE Driver_ID = '" & ID & "' ;"
当我 运行 填充我数据的代码行时 table 说没有为一个或多个参数给出值
Order = New OleDb.OleDbDataAdapter("SELECT * FROM Orders WHERE
Driver_ID = " & ID, DBREF)
Order.Fill(dataODtable)
DGVorders.DataSource = dataODtable
代码是这样写的:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll
下面是 link 数据库的图像,table 它正在引用。 (数据库订单table)
如果我尝试 运行 没有 where 语句的代码,它 运行 不会崩溃。
字段 DRIVER_ID 显然是一个字符串,因此您需要将要用于 WHERE 子句的值用单引号引起来。
但由于一长串原因(Sql 注入、解析错误、不兼容语言环境的自动类型转换),这是错误的。
所以你真的需要尽快开始使用参数化查询来避免这些失误
Dim cmdText = "SELECT * FROM Orders WHERE Driver_ID = @drvID"
Order = New OleDb.OleDbDataAdapter(cmdText, DBREF)
Order.SelectCommand.Parameters.Add("@drvID", OleDbType.VarWChar).Value = ID
Order.Fill(dataODtable)
DGVorders.DataSource = dataODtable
现在不再构建查询将字符串片段连接在一起(sql 注入黑客的主要来源)但是您创建了一个正确类型的参数对象并将其传递给将使用它的数据库引擎需要的时候。
另一个好处是您获得的代码更清晰。在这种情况下,可能不是很明显,但是对于更复杂的查询,您将更清楚地了解您要对数据库执行的操作。
你可以这样试试:
Order = New OleDb.OleDbDataAdapter("SELECT * FROM Orders WHERE
Driver_ID = '"& ID &"'", DBREF)
Order.Fill(dataODtable)
DGVorders.DataSource = dataODtable
也许这就是问题所在。
如果 Driver_ID
是字母数字列,select 查询应该是 SELECT * FROM Orders WHERE Driver_ID = '" & ID & "' ;"