Sub GetData(ByVal SelectedColumn As String, ByVal Table As String, ByVal ConditionField As String, ByVal ConditionValue As String, ByVal FieldValue As Integer)
con.Close()
con.Open() Query = "select " & SelectedColumn & " from " & Table & " where " & ConditionField & " = " & ConditionValue
cmd = New OleDbCommand(Query, con)
DR = cmd.ExecuteReader
While DR.Read
FieldValue = DR.Item(SelectedColumn)
End While
con.Close()
End Sub
我创建这个子以获取一个值到数据库我的数据库是Access 2010.当我运行它时,FieldValue没有返回正确的值
Dim S As Integer
GetData("Price", "ProductList", "ProductName", "'7up'", S)
MsgBox(S)
现在我使用Sub并打印它获得的值,但MsgBox值为零(0)。它应该是八(8)。我尝试在获取值后将msgBox放入Sub和Print FieldVAlue并打印正确的值。但为什么我的昏暗“S”仍为零?顺便说一下Sub在我的模块中
答案 0 :(得分:0)
您的问题是FieldValue
是S
的副本。你真的没有设置S
。声明ByRef FieldValue...
和您的业务
在vb.net中有值和引用类型。值类型参数(例如integer
)作为值的副本传递。而引用类型传递地址副本。当您传递int(10)ByVal
时,您传递了副本。执行FieldValue = DR.Item(SelectedColumn)
时,可以在方法中设置值。但是你没有设置S
。但是如果你传递ByRef
,则传递地址副本,在这种情况下,你设置的值与S
相同。
当然,如果您对查询使用while
可能会返回超过1个结果 - 这是一个问题。至少,如果您期望1个值,则使用if
,或者更好 - ExecuteScalar