Pytanie : Datareader przedmiot być już otwarty wiadomość

Cześć,

I am the następujący kod.  Jeden the argument być lista przedmiot.  I próbować przez the przedmiot w lstTechCode i lista przedmiot.  Gdy I biegać the kod I dostawać błąd wiadomość który datareader przedmiot być już otwarty.  
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
Public Podzielony Funkcja GetDatasetList (ByVal strMetricName Jako Sznurek, ByVal strInputCode Jako Sznurek, ByVal lstTechCode Jako Lista (TechnologySet), ByVal intSelectedYear Jako Integer) Lista (DataSetClass)
        Ciemnawy datasetlist Nowy Lista (DataSetClass)
        Ciemnawy CnSql Jako SqlConnection = BadsDB.GetConnection
        Ciemnawy cmdA Jako SqlCommand
        Ciemnawy czytelnik Jako SqlDataReader = Nic
        cmdA = Nowy SqlClient.SqlCommand ("up_GetGraphReportDataset", CnSql)
        cmdA.CommandTimeout = 7200
        Próba
            Dla LstTechCode t Jako TechnologySet W lstTechCode
                Z cmdA
                    .CommandType = CommandType.StoredProcedure
                    . Parameters.AddWithValue ("@MetricName", strMetricName.ToString)
                    . Parameters.AddWithValue ("@InputCode", strInputCode.ToString)
                    . Parameters.AddWithValue ("@TechnologySetCode", t.TechnologySetCode.ToString)
                    . Parameters.AddWithValue ("@BudgetYear", intSelectedYear)
                Końcówka Z
                Jeżeli CnSql.State = ConnectionState.Closed Wtedy
                    CnSql.Open ()
                Kończyć Jeżeli
                czytelnik = cmdA.ExecuteReader (CommandBehavior.CloseConnection)
                Ciemnawy DataVersionIdOrd Jako Integer = reader.GetOrdinal ("DataVersionId")
                Ciemnawy dsc Jako DataSetClass
                Robić Podczas Gdy czytelnik. Czytać
                    dsc = Nowy DataSetClass
                    dsc.DataVersionId = reader.GetString (DataVersionIdOrd)
                    datasetlist. Dodawać (dsc)
                Pętla
            Następnie

            czytelnik. Zamykać ()
        Łapać excA Jako SqlException
            MsgBox (excA.Message, excA.GetType.ToString)
        W końcu
            CnSql.Close ()
        Końcówka Próba
        Powrotny datasetlist
    Końcówka Funkcja

Odpowiedź : Datareader przedmiot być już otwarty wiadomość

próba ono lubić lubić… musieć, ale ponieważ I mieć the storedprocedure Etc.
(1):
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
Społeczeństwo Podzielony Funkcja GetDatasetList (ByVal strMetricName Jako Sznurek, ByVal strInputCode Jako Sznurek, ByVal lstTechCode Jako Lista (TechnologySet), ByVal intSelectedYear Jako Integer) Lista (DataSetClass)
        Ciemnawy datasetlist Nowy Lista (DataSetClass)
        Ciemnawy CnSql Jako SqlConnection = BadsDB.GetConnection
        Ciemnawy cmdA Jako SqlCommand
        Ciemnawy czytelnik Jako SqlDataReader = Nic
        cmdA = Nowy SqlClient.SqlCommand ("up_GetGraphReportDataset", CnSql)
        cmdA.CommandTimeout = 7200
        Próba
            Dla LstTechCode t Jako TechnologySet W lstTechCode
                Z cmdA
                    .CommandType = CommandType.StoredProcedure
                    . Parameters.AddWithValue ("@MetricName", strMetricName.ToString)
                    . Parameters.AddWithValue ("@InputCode", strInputCode.ToString)
                    . Parameters.AddWithValue ("@TechnologySetCode", t.TechnologySetCode.ToString)
                    . Parameters.AddWithValue ("@BudgetYear", intSelectedYear)
                Końcówka Z
                Jeżeli CnSql.State = ConnectionState.Closed Wtedy
                    CnSql.Open ()
                Kończyć Jeżeli
                czytelnik = cmdA.ExecuteReader (CommandBehavior.CloseConnection)
                Ciemnawy DataVersionIdOrd Jako Integer = reader.GetOrdinal ("DataVersionId")
                Ciemnawy dsc Jako DataSetClass
                Robić Podczas Gdy czytelnik. Czytać
                    dsc = Nowy DataSetClass
                    dsc.DataVersionId = reader.GetString (DataVersionIdOrd)
                    datasetlist. Dodawać (dsc)
                Pętla
            czytelnik. Zamykać ()
            cmdA.Parameters.Clear ()
            Następnie


        Chwyt excA Jako SqlException
            MsgBox (excA.Message, excA.GetType.ToString)
        W końcu
            CnSql.Close ()
        Końcówka Próba
        Powrotny datasetlist
    Końcówka Funkcja
Inne rozwiązania  
 
programming4us programming4us