1

の記入に関する質問OleDbDataAdapter

私は持っています:

Dim cmd As OleDbCommand = New OleDbCommand(myQuery), myConnection)
Dim da As OleDbDataAdapter = New OleDbDataAdapter()
Dim dtDonnees As DataTable = New DataTable()
da.Fill(dtDonnees)

充填に時間がかかりすぎます。
20行の場合、20秒かかります。
そして、130 000の場合、もう少し時間がかかります(ただし、130 000秒ではありません)。
しかし、とにかく20秒は長すぎます。

なんでこんなに時間がかかるの?


質問パート2:塗りつぶしをスキップできますか?

つまり、データテーブルに入力した後、データテーブルの各行に対してを実行し、エンティティにキャストします。

Dim returnList As New List(Of myObject)(dtDonnees.Rows.Count)
For Each rowDonnee As DataRow In dtDonnees.Rows
   returnList.Add(New myObject(rowDonnee))'set every data of the row into my new object
Next

の各行を渡すことはできますOleDbDataAdapterか?

4

1 に答える 1

0

試してみたい場合は、このメソッドでDataAdapterの入力をスキップできます(DataTableが不要であると想定)。パフォーマンスが大幅に向上するかどうかはわかりません。

Dim cmd As OleDbCommand = New OleDbCommand(myQuery, myConnection) 
Dim reader As OleDbDataReader = cmd.ExecuteReader()
while reader.Read()
   returnList.Add(New myObject(reader))
end while  

もちろん、オブジェクトのコンストラクターでは、データを読み取り、オブジェクトの内部状態を設定する必要があります

Public Class myObject

   Dim myData As String
   ' other internal var to keep state of this object instance

   Public Sub New(ByVal reader as OleDbDataReader)
       myData = reader.GetString(0)
       ' read and initialize other internal data.
   End Sub
End Class
于 2012-04-30T19:58:37.453 に答える