0

Access データベースから文字列値を選択し、それらを文字列の配列に配置して、配列でループ ステートメントを実行できるようにしようとしています。

ただし、クエリの結果を配列に配置する方法がわかりません。データベースにクエリを実行する方法は知っていますが、必要なのは結果を配列に入れる方法だけです。

私のselect文はSelect motonum from moto. motonum配列に入れたい。

データを読み取るコード全体は次のとおりです。

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`
4

1 に答える 1

8

プロジェクトの実際のニーズに応じて、これにアプローチするさまざまな方法があります。何よりもまず、戻り値の型として実際に文字列配列が必要かどうかお尋ねします。ほとんどの場合、配列は、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 オブジェクトの適切な破棄と破棄が処理されます。

于 2013-01-12T12:46:24.680 に答える