有许多不同的方法可以解决这个问题,具体取决于项目的实际需求。首先,我会问你是否真的需要一个字符串数组作为返回类型。在大多数情况下,数组不如 List(Of String) 或其他实现 IEnumerable 的类型有用。
这里有两个选项,都涉及 List(Of String)。但是,将 List 返回给调用者,然后调用者可以选择使用 List 类型的许多有用方法来处理数据:
这是我推荐的方式:
Public Function getListOfMotonum() As List(Of String)
Dim SQL As String = "SELECT motonum FROM moto"
Dim output As New List(Of String)()
' Set the connection string in the Solutions Explorer/Properties/Settings object (double-click)
Using cn = New SqlConnection(Properties.Settings.[Default].MyConnectionString)
Using cmd = New SqlCommand(SQL, cn)
cn.Open()
Try
Dim dr = cmd.ExecuteReader()
While dr.Read()
output.Add(dr("motonum").ToString())
End While
Catch e As SqlException
' Do some logging or something.
MessageBox.Show("There was an error accessing your data. DETAIL: " & e.ToString())
End Try
End Using
End Using
Return output
End Function
这是一个使用此函数输出的简单代码示例:
Private Sub PrintListToConsole()
Dim MyMotonumList = Me.getListOfMotonum()
For Each item As String In MyMotonumList
Console.WriteLine(item)
Next
End Sub
如果您的项目需要一个字符串数组,则方法可能会有所不同。您可以从同一个函数返回一个字符串,只需稍作修改:
' Change the return type in the function signature:
Public Function getArrayOfMotonum() As String()
Dim SQL As String = "SELECT motonum FROM moto"
Dim output As New List(Of String)()
' . . . Same Data Access code as above:
' Just use the .ToArray method of the List class HERE:
Return output.ToArray()
End Function
或者,您可以在客户端代码中使用相同的方法,使用返回列表的原始函数:
Private Sub PrintArrayToConsole()
Dim MyMotonumArray = Me.getArrayOfMotonum()
For Each item As String In MyMotonumArray
Console.WriteLine(item)
Next
End Sub
从函数中返回 List 提供了一种更灵活的返回类型,以及许多有用的方法。
作为旁注,请允许我在消耗数据访问资源时推荐 Using 块。这将为您处理 Connection 和 Command 对象的正确拆卸和处置。