SqlDataReader - podwójne użycie

0

Witam,
Z bazy danych pobieram listę tez. Dla każdej tezy chciałabym wywołać kolejne zapytanie - wykorzystujące pobrany nr_orzeczenia. Kiedy próbowałam użyć kolejnego readera - dostawałam komunikat, że "Istnieje już skojarzony z tym poleceniem otwarty element DataReader, który należy najpierw zamknąć."

Jak inaczej można to zrobić...?

xml.AppendChild(root);
        XmlElement lista = xml.CreateElement("lista-orzeczen");
        root.AppendChild(lista);

        SqlCommand orzeczComm = new SqlCommand(orzeczText, sqlConn, sqlTran);
        using (SqlDataReader reader = orzeczComm.ExecuteReader())
        {
            while (reader.Read())
            {
                XmlElement teza = xml.CreateElement("teza");
                teza.SetAttribute("nr-tezy-orzecz", reader["nr_tezy_orzecz"].ToString());
                teza.SetAttribute("nr-orzecz", reader["nr_orzeczenia"].ToString());
                lista.AppendChild(teza);

                XmlElement sygnatura = xml.CreateElement("sygnatura");
                //tu bym chciała wstawić dane z nowego zapytania
                teza.AppendChild(sygnatura);
            }
        }
0

nie da sie, tzn. muszisz najpierw przeczytac jeden reader i zamknac, aby w ramach tego samego connection otworzyc kolejny

0

Hm. Czy dobrym pomysłem w takim razie będzie po powyższym przelecenie pętlą xmla i dla każdego elementu teza odczytać atrybut nr-orzecz i dla niego wywołanie nowego zapytania?
Czy są może jakieś inne, bardziej eleganckie rozwiązania?

1

Sa, np. jedno zapytanie laczace tezy z orzeczeniami. Wystapi wprawdzie powtorzenie danych dla tezy, jesli teza-orzeczenie to minimum 1-wiele. Mozesz tez zapamietac np. w liscie id tezy i na podstawie tej listy pobrac orzeczenia, najlepiej tez jednym zapytaniem, a nie kazde z osobna.

0

jest jeden do wiele, i NIE MOŻE być nadmiarowych danych...
drugie rozwiązanie wydaje mi się bez sensu, bo przecież i tak muszę potem to przypisać do konkretnych node'ów teza... to gdzie to jest 'elegantsze'?

0

Po pierwsze masz tylko 2 zapytania, a nie 1 + n tez. W czym problem, zeby to przypisac do konkretnych node'ow? Zrob sobie slownik id tezy -> node tezy na przyklad.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.