Frage : Datareader Gegenstand ist bereits geöffnete Mitteilung

Hallo,

I morgens versuchend, den folgenden Code zu erhalten, um zu arbeiten.  Eins der Argumente ist ein Listengegenstand.  Ich versuche, mich durch die Gegenstände im lstTechCode zu schlingen und einen Listengegenstand zurückzubringen.  Wenn ich den Code ich laufen lasse, eine Fehlermeldung erhalten, dass ein datareader Gegenstand bereits geöffnet ist.  
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:
6:
37:
Public geteilte Funktion GetDatasetList (ByVal strMetricName als Schnur, ByVal strInputCode als Schnur, ByVal lstTechCode als Liste (von TechnologySet), ByVal intSelectedYear als ganze Zahl) als Liste (von DataSetClass)
        Schwaches datasetlist als neue Liste (von DataSetClass)
        Schwaches CnSql als SqlConnection = BadsDB.GetConnection
        Schwaches cmdA als SqlCommand
        Schwacher Leser als SqlDataReader = nichts
        cmdA = neues SqlClient.SqlCommand („up_GetGraphReportDataset“, CnSql)
        cmdA.CommandTimeout = 7200
        Versuch
            Für jedes t als TechnologySet im lstTechCode
                Mit cmdA
                    .CommandType = CommandType.StoredProcedure
                    . Parameters.AddWithValue („@MetricName“, strMetricName.ToString)
                    . Parameters.AddWithValue („@InputCode“, strInputCode.ToString)
                    . Parameters.AddWithValue („@TechnologySetCode“, t.TechnologySetCode.ToString)
                    . Parameters.AddWithValue („@BudgetYear“, intSelectedYear)
                Ende mit
                Wenn CnSql.State = ConnectionState.Closed dann
                    CnSql.Open ()
                Beenden wenn
                Leser = cmdA.ExecuteReader (CommandBehavior.CloseConnection)
                Schwaches DataVersionIdOrd als ganze Zahl = reader.GetOrdinal („DataVersionId“)
                Schwaches dsc als DataSetClass
                Tun während Leser. Lesen
                    dsc = neues DataSetClass
                    dsc.DataVersionId = reader.GetString (DataVersionIdOrd)
                    datasetlist. Hinzufügen (dsc)
                Schleife
            Zunächst

            Leser. Schließen ()
        excA als SqlException sich verfangen
            MsgBox (excA.Message, excA.GetType.ToString)
        Schließlich
            CnSql.Close ()
        Enden-Versuch
        Rückholdatasetlist
    Enden-Funktion

Antwort : Datareader Gegenstand ist bereits geöffnete Mitteilung

Versuch, den es dieses… mag, sollte arbeiten, aber nicht versucht, weil ich nicht das storedprocedure etc. habe.
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:
6:
37:
38:
39:
Öffentlichkeit geteilte Funktion GetDatasetList (ByVal strMetricName als Schnur, ByVal strInputCode als Schnur, ByVal lstTechCode als Liste (von TechnologySet), ByVal intSelectedYear als ganze Zahl) als Liste (von DataSetClass)
        Schwaches datasetlist als neue Liste (von DataSetClass)
        Schwaches CnSql als SqlConnection = BadsDB.GetConnection
        Schwaches cmdA als SqlCommand
        Schwacher Leser als SqlDataReader = nichts
        cmdA = neues SqlClient.SqlCommand („up_GetGraphReportDataset“, CnSql)
        cmdA.CommandTimeout = 7200
        Versuch
            Für jedes t als TechnologySet im lstTechCode
                Mit cmdA
                    .CommandType = CommandType.StoredProcedure
                    . Parameters.AddWithValue („@MetricName“, strMetricName.ToString)
                    . Parameters.AddWithValue („@InputCode“, strInputCode.ToString)
                    . Parameters.AddWithValue („@TechnologySetCode“, t.TechnologySetCode.ToString)
                    . Parameters.AddWithValue („@BudgetYear“, intSelectedYear)
                Ende mit
                Wenn CnSql.State = ConnectionState.Closed dann
                    CnSql.Open ()
                Beenden wenn
                Leser = cmdA.ExecuteReader (CommandBehavior.CloseConnection)
                Schwaches DataVersionIdOrd als ganze Zahl = reader.GetOrdinal („DataVersionId“)
                Schwaches dsc als DataSetClass
                Tun während Leser. Lesen
                    dsc = neues DataSetClass
                    dsc.DataVersionId = reader.GetString (DataVersionIdOrd)
                    datasetlist. Hinzufügen (dsc)
                Schleife
            Leser. Schließen ()
            cmdA.Parameters.Clear ()
            Zunächst


        Fang excA als SqlException
            MsgBox (excA.Message, excA.GetType.ToString)
        Schließlich
            CnSql.Close ()
        Enden-Versuch
        Rückholdatasetlist
    Enden-Funktion
Weitere Lösungen  
 
programming4us programming4us