FieldValue未返回

时间:2016-11-19 02:13:44

标签: vb.net visual-studio

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在我的模块中

1 个答案:

答案 0 :(得分:0)

您的问题是FieldValueS的副本。你真的没有设置S。声明ByRef FieldValue...和您的业务

在vb.net中有值和引用类型。值类型参数(例如integer)作为值的副本传递。而引用类型传递地址副本。当您传递int(10)ByVal时,您传递了副本。执行FieldValue = DR.Item(SelectedColumn)时,可以在方法中设置值。但是你没有设置S。但是如果你传递ByRef,则传递地址副本,在这种情况下,你设置的值与S相同。

当然,如果您对查询使用while可能会返回超过1个结果 - 这是一个问题。至少,如果您期望1个值,则使用if,或者更好 - ExecuteScalar