I am trying to select string values from an Access database and then place them into an array of strings so that I can perform a loop statement on the array.

However I don’t know how to place the result of the query into an array. I know how to query the database but all I need is how to put the result in an array.

My select statement is Select motonum from moto. I want to put motonum in an array.

The whole code to read the data is:

connect2()

If Not cnn2.State = ConnectionState.Open Then

‘open connection

cnn2.Open()

‘MessageBox.Show(“chk2”)

End If

cmd5.Connection = cnn2

cmd5.CommandText = “Select motonum from moto”

myData5 = cmd5.ExecuteReader

While myData5.Read

‘code to return results here

End While`

解决方案

There are any number of different ways to approach this, depending on the actual needs of your project. First and foremost, I would ask if you actually require a string array as the return type. For most cases, an array is less useful that a List(Of String) or other types which implement IEnumerable.

Here are two options, both of which involve a List(Of String). However, one returns the List to the caller, which can then choose to employ the many useful methods of the List type in working with the data:

THIS is the way I would recommend:

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

Here is a trivial example of code which consumes the output of this function:

Private Sub PrintListToConsole()

Dim MyMotonumList = Me.getListOfMotonum()

For Each item As String In MyMotonumList

Console.WriteLine(item)

Next

End Sub

If your project REQUIRES a string array, the approach may vary. You can return a string from the same function with a couple minor modifications:

‘ 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

Or, you can use the same method in your client code, consuming the original function which returns a list:

Private Sub PrintArrayToConsole()

Dim MyMotonumArray = Me.getArrayOfMotonum()

For Each item As String In MyMotonumArray

Console.WriteLine(item)

Next

End Sub

Returning the List from your function provides a more flexible return type, with many useful methods.

As a side note, allow me to recommend the Using block when consuming data access resources. This handles the proper tear down and disposal of the Connection and Command objects for you.