1

現在、ユーザーがSQLコードを入力できるようにするクラスを作成し、クラスは結果を配列に返し、さらに使用できるようにしています。ほとんどのメソッドは、ループを使用して OleDbDataReader オブジェクトから配列にデータを転送します。多数のアイテムを処理する場合、これは非常に遅くなる可能性があります。

現在の方法:

Dim SQLdr As OleDbDataReader  'SQL reader
Dim SQLCmd As New OleDbCommand() 'The SQL Command
Dim firstline As Boolean
SQLCmd.Connection = SQLConn 'Sets the Connection to use with the SQL Command
SQLCmd.CommandText = SQLStr 'Sets the SQL String
SQLdr = SQLCmd.ExecuteReader 'Gets Data

そしてその後..

While (SQLdr.Read)
  If firstline = True Then
    'fill headers
    Do Until j = SQLdr.FieldCount
      result(j, i) = SQLdr.GetName(j)
      j = j + 1
    Loop
    firstline = False
    j = 0
    i = 1
  End If

  j = 0
  Do Until j = SQLdr.FieldCount
    ReDim Preserve result(result.GetUpperBound(0), result.GetUpperBound(1) + 1)
    If display = True Then
      MsgBox(j & ":" & i & SQLdr(j).ToString)
    End If
    result(j, i) = SQLdr(j).ToString
    j = j + 1
  Loop

  i = i + 1
End While

結果を配列に出力するためのより直接的な方法があるかどうかを知りたい..申し訳ありませんが、どこから始めればよいか、それが可能かどうか、または誰かがこれを試したことがあるかどうかはわかりません前。

4

2 に答える 2

3

これは本当に VB.NET ですか? ただし、ReDim Preserve配列のサイズ変更には使用しないでください。代わりに、ジェネリックListとそのAddメソッドを使用してください。また、データにカスタム クラスを使用する必要があります。これにより、可読性が向上し、再利用が容易になり、エラーが発生しにくくなります。Objectボックス化/ボックス化解除する必要がないため、どこでも使用しない場合も高速です。

これは、2 つのプロパティを持つカスタム クラスであるList(Of User)whereの例です。Ùser

Dim users = New List(Of User)
Using con = New OleDb.OleDbConnection(connectionString)
    Using cmd = New OleDb.OleDbCommand("SELECT UserID, UserName FROM dbo.User ORDER BY UserName", con)
        con.Open()
        Using rdr = cmd.ExecuteReader()
            While rdr.Read()
                Dim user = New User()
                user.UserID = rdr.GetInt32(0)
                user.UserName = rdr.GetString(1)
                users.Add(user)
            End While
        End Using
    End Using
End Using 

ここに単純なクラスがあります:

Class User
    Public Property UserID As Int32
    Public Property UserName As String
End Class

コードを動的のままにしたい場合は、 a を使用して/DataAdapterを埋めることもできます。これにより、コードの多くが簡素化され、効率も向上します。DataTableDataSet

Dim table = New DataTable()
Using con = New OleDb.OleDbConnection(connectionString)
    Using da = New OleDb.OleDbDataAdapter("SELECT UserID, UserName FROM dbo.User ORDER BY UserName", con)
        da.Fill(table)
    End Using
End Using
于 2013-04-18T20:19:56.310 に答える