从函数vb.net返回2个值

ale*_*mon 2 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 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
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.该函数仅返回"a"的值谢谢

gen*_*pos 9

要返回更多值,您需要更改"作为对象"的功能

Function Buscar_Registro(ByVal xId As Integer) As Object
Run Code Online (Sandbox Code Playgroud)

然后你可以这样将你的返回值放入一个对象:

Return{a, b, true}
Run Code Online (Sandbox Code Playgroud)

你会以这种方式得到你的价值观:

Dim mObj as object = Buscar_Registro(yourInteger)
Run Code Online (Sandbox Code Playgroud)

你会有:

a in mObj(0) 
b in mObj(1)
True in mObj(2)
Run Code Online (Sandbox Code Playgroud)

适应您的需求

编辑(给那些投票的人留言):

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

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

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

  • 不知道为什么这会导致TBH失败.是的,使用课程是应该去的方式,但是,我也可以欣赏这个答案中的创造力.人们忘了他们建议的答案就是 - 建议.由OP决定哪一个最适合他们的情况.蝙蝠侠,出局. (3认同)

Mag*_*nus 6

这里最好的选择是用你需要的数据创建你自己的类并返回它。

Public Class Data
    Public Property Nombre As String
    Public Property Apellido As String
End Class
Run Code Online (Sandbox Code Playgroud)

然后做:

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
Run Code Online (Sandbox Code Playgroud)

从 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
Run Code Online (Sandbox Code Playgroud)