プロジェクトの実際のニーズに応じて、これにアプローチするさまざまな方法があります。何よりもまず、戻り値の型として実際に文字列配列が必要かどうかお尋ねします。ほとんどの場合、配列は、List(Of String) や IEnumerable を実装するその他の型ほど有用ではありません。
ここに 2 つのオプションがあり、どちらも List(Of String) を含みます。ただし、リストを呼び出し元に返すと、データを操作する際にリスト型の多くの便利なメソッドを使用することを選択できます。
これは私がお勧めする方法です:
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 オブジェクトの適切な破棄と破棄が処理されます。