我想要的是使用函数从数据库返回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"的值。 感谢
答案 0 :(得分:6)
要返回更多值,您需要将功能更改为“作为对象”
Function Buscar_Registro(ByVal xId As Integer) As Object
然后你可以这样把你的返回值放到一个对象中:
Return{a, b, true}
你会以这种方式获得你的价值观:
Dim mObj as object = Buscar_Registro(yourInteger)
你会得到:
a in mObj(0)
b in mObj(1)
True in mObj(2)
使其适应您的需求
编辑(向投降的人发送消息):
使用特定的Object(创建的对象)创建一个类,使一个Function能够返回多个元素肯定是最好的选择。
无论如何,如果有人不知道我可以使用我在答案中显示的方法,他可能还没有(还)能够创建一个课程。所以我认为最好给出一个可用的(但不是完美的)答案,而不是一个完美的(但对于那个问过的人来说无法解决)答案。
这就是我的想法。任何人都可以有不同的想法。
答案 1 :(得分:4)
这里你最好的选择就是用你需要的数据创建你自己的类并返回它。
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
答案 2 :(得分:2)
我是.net的新手,但不会" ByRef"是最简单的方法吗?
Function Buscar_Registro(ByVal xId As Integer, ByRef a As String, ByRef b As String)