2016-05-28 11 views
0

私はオブジェクト(製品)のリストとその中の別のリスト(サイズ)を取得するために次のコードを使用しています。VB netとpostgres:npgsqlを使用して「操作が既に進行中です。」

Dim l As New List(Of Entidades.producto) 

Dim c As New NpgsqlCommand("select id, name from product", cn) 
Dim r As NpgsqlDataReader = c.ExecuteReader 

Do While r.Read 

    Dim p As New Entidades.product 
    p.ID = r.Item("id") 
    p.name = r.Item("name") 
    l.Add(p) 

    >>> I HAD THE OTHER LOOP HERE BUT HAVING THE SAME ISSUE TRIED TO PUT THE 
    READER OUTSIDE OF THIS LOOP. 

Loop 

r.Close() 

For Each p In l 
    c = New NpgsqlCommand("select t.id id, t.name nombre from productsize pt join size t on t.id = pt.sizeid where productid = :productid order by ord", cn) 
    c.Parameters.AddWithValue("productid", pgsqlTypes.NpgsqlDbType.Integer, p.ID) 
    c.Prepare() <---- HERE I GET THE ERROR 

    Dim rt As NpgsqlDataReader = c.ExecuteReader 

    Do While rt.Read 

     Dim t As New size 
     t.ID = rt.Item("id") 
     t.nombre = rt.Item("name") 
     p.size.Add(t) 

    Loop 

Next 


Return l 

準備を実行すると、「操作が既に進行中です」というエラーが表示されます。

私はリーダーを閉じることで十分だと思って別のものを動かすことができました。

ANYONEにも同じ問題がありますか?

ありがとうございます。

+1

準備完了を取り除き、ループの後で2番目のリーダーを閉じるようにしてください – Steve

+0

問題は2番目の問題でした。エラーは実際にこのメソッドの2回目の実行でした.... Thanks Steve – Daniel

+0

Postgresはわかりませんが、プロバイダがMultipleActiveResultSets = Trueをサポートしているかどうかを確認します。その場合、もう2つのループは必要なく、最初のリーダーにサービスを提供している間に接続を再利用することができます – Steve

答えて

0

実際には、問題が見つかりました。 2番目のループは読者を閉じていない、私は再び関数を呼び出したとき、それは爆発した。

Steveがチップに感謝します。

関連する問題