从函数vb.net返回2个值

从函数vb.net返回2个值,vb.net,Vb.net,我想要的是用一个函数从数据库返回2个值,然后将这些值存储在变量中,这样我就可以使用它们了。这是我的密码 Function Buscar_Registro(ByVal xId As Integer) As String Dim a, b As String 'convertir cadena Dim Id As Integer Id = xId 'conexión Dim Conexion As OleDbConnection = New Ole

我想要的是用一个函数从数据库返回2个值,然后将这些值存储在变量中,这样我就可以使用它们了。这是我的密码

Function Buscar_Registro(ByVal xId As Integer) As String
    Dim a, b As String

    'convertir cadena
    Dim Id As Integer
    Id = xId

    'conexión
    Dim Conexion As OleDbConnection = New OleDbConnection
    Conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Visual\2000Phrases\2000 Phrases.accdb"

    'cadena SQL
    Dim CadenaSQL As String = "SELECT * FROM Data WHERE Id = " & Id

    'Adaptador
    Dim Adaptador As New OleDbDataAdapter(CadenaSQL, Conexion)

    'Data set
    Dim Ds As New DataSet

    'Llenar el Data set
    Conexion.Open()
    Adaptador.Fill(Ds)
    Conexion.Close()

    'Contar registro
    If (Ds.Tables(0).Rows.Count = 0) Then
        Return False
    Else
        a = Ds.Tables(0).Rows(0)("Nombre").ToString()
        b = Ds.Tables(0).Rows(0)("Apellido").ToString()

        Ds.Dispose()
        Return a
        Return b
        Return True
    End If


End Function


Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    Randomize()
    Dim value As Integer = CInt(Int((20 * Rnd()) + 1))
    TextBox3.Text = Buscar_Registro(value)
    TextBox4.Text = 
End Sub
我不知道怎么做。函数只返回“a”的值
感谢

要返回更多值,您需要更改“作为对象”的函数

然后您可以通过以下方式将返回值放入对象:

Return{a, b, true}
Dim mObj as object = Buscar_Registro(yourInteger)
您将通过以下方式获得您的价值观:

Return{a, b, true}
Dim mObj as object = Buscar_Registro(yourInteger)
您将有:

a in mObj(0) 
b in mObj(1)
True in mObj(2)
适应你的需要

编辑(向被否决者发送消息):

使用特定对象(创建的对象)创建一个类以使函数能够返回多个元素肯定是最佳选择

无论如何,如果有人不知道可以使用我在答案中显示的方法,他可能(还)无法创建类。因此,我认为最好给出一个可用的(但不是完美的)答案,而不是一个完美的(但对提出问题的人来说是不可用的)答案


这就是我的想法。任何人都可以有不同的想法。

您最好的选择是使用所需的数据创建自己的类并返回该类

Public Class Data
    Public Property Nombre As String
    Public Property Apellido As String
End Class
然后做:

Function Buscar_Registro(ByVal xId As Integer) As Data
....
    If (Ds.Tables(0).Rows.Count = 0) Then
        Return Nothing
    Else
        a = Ds.Tables(0).Rows(0)("Nombre").ToString()
        b = Ds.Tables(0).Rows(0)("Apellido").ToString()

        Ds.Dispose()
        return new Data() With {.Nombre = a, .Apellido = b}
    End If
End Function
从VB 15开始,您可以使用
ValueTuple

Function Buscar_Registro(ByVal xId As Integer) As (Nombre As String, Apellido As String)
    ....
        If (Ds.Tables(0).Rows.Count = 0) Then
            Return (Nothing, Nothing)
        Else
            a = Ds.Tables(0).Rows(0)("Nombre").ToString()
            b = Ds.Tables(0).Rows(0)("Apellido").ToString()

            Ds.Dispose()
            Return (a, b)
        End If
    End Function

我刚接触.net,但“ByRef”不是最简单的方法吗

Function Buscar_Registro(ByVal xId As Integer, ByRef a As String, ByRef b As String)

可以返回对象的数组/列表。只需将返回值添加到数组中,然后最终返回数组/列表。或者,您可以创建自己的类或结构,并将其作为函数的返回类型。只要使用return关键字,方法就会结束,指定的值就会返回给调用方法……基本上,第一次返回将被命中,之后的所有内容将被忽略。Farham Anam和NoAlias对您的原始问题都有正确的答案。或者您可以返回第一个数据行,其中已经包含了两个信息位,但不确定为什么会被否决TBH。是的,使用课堂是&应该是一种方式,但是,我也能欣赏这个答案中的创造性。人们忘记了他们的建议答案正是建议。由OP决定哪一个最适合他们的案例。蝙蝠侠,出去,哇。值元组。是元组吗?@user4951是的,您可以在此处阅读更多有关元组的信息: