2016-05-28 5 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 

И я получаю ошибку «Операция уже выполняется», когда я выполняю подготовку.

Я думал, что закрытие читателя было достаточно, чтобы я мог запустить другой.

У каждого была такая же проблема?

Спасибо i advance

+1

Попробуйте удалить Подготовку и закройте второй считыватель после петли – Steve

+0

Проблема была второй. Ошибка была фактически вторым выполнением этого метода .... Спасибо Steve – Daniel

+0

Я не знаю Postgres, но я бы проверить, поддерживает ли провайдер параметр MultipleActiveResultSets = True в строке подключения. В этом случае вам больше не нужны две петли и вы можете повторно использовать соединение, пока оно служит первому читателю – Steve

ответ

0

На самом деле, я нашел проблему. Второй цикл не закрывал читателя, и когда я снова вызвал функцию, он взорвался.

Спасибо Стив за отзыв.