Vraag : Het voorwerp van Datareader is reeds open bericht

Hello,

I am de volgende code proberen ertoe te brengen om te werken.  Één van de argumenten is een lijstvoorwerp.  Ik probeer aan lijn door de voorwerpen in lstTechCode en keer een lijstvoorwerp terug.  Wanneer ik de code in werking stel krijg ik een foutenmelding dat een datareadervoorwerp reeds open is.  
" codeBody "
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:
van
Public Gedeelde Functie GetDatasetList (ByVal strMetricName als Koord, ByVal strInputCode als Koord, ByVal lstTechCode als Lijst (van TechnologySet), ByVal intSelectedYear als Geheel) als Lijst (van DataSetClass)
        Schemerige datasetlist als Nieuwe Lijst (van DataSetClass)
        Schemerige CnSql als SqlConnection = BadsDB.GetConnection
        Schemerige cmdA als SqlCommand
        Schemerige lezer als SqlDataReader = niets
        cmdA = Nieuwe SqlClient.SqlCommand („up_GetGraphReportDataset“, CnSql)
        cmdA.CommandTimeout = 7200
        Probeer
            Voor Elk t als TechnologySet in lstTechCode
                Met cmdA
                    .CommandType = CommandType.StoredProcedure
                    . Parameters.AddWithValue („@MetricName“, strMetricName.ToString)
                    . Parameters.AddWithValue („@InputCode“, strInputCode.ToString)
                    . Parameters.AddWithValue („@TechnologySetCode“, t.TechnologySetCode.ToString)
                    . Parameters.AddWithValue („@BudgetYear“, intSelectedYear)
                Eind met
                Als CnSql.State = ConnectionState.Closed toen
                    CnSql.Open ()
                Eind als
                lezer = cmdA.ExecuteReader (CommandBehavior.CloseConnection)
                Schemerige DataVersionIdOrd als Geheel = reader.GetOrdinal („DataVersionId“)
                Schemerige dsc als DataSetClass
                Doe terwijl lezer. Lees
                    dsc = Nieuwe DataSetClass
                    dsc.DataVersionId = reader.GetString (DataVersionIdOrd)
                    datasetlist. Voeg toe (dsc)
                Lijn
            Daarna

            lezer. Sluit ()
        Vang excA als SqlException
            MsgBox (excA.Message, excA.GetType.ToString)
        Tot slot
            CnSql.Close ()
        Het eind probeert
        Datasetlist van de terugkeer
    De Functie van het eind

Antwoord : Het voorwerp van Datareader is reeds open bericht

probeer het als dit… zou moeten werken, maar geprobeerd niet omdat ik niet storedprocedure enz. heb.
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:
Gedeelde Overheidsfunctie GetDatasetList (ByVal strMetricName als Koord, ByVal strInputCode als Koord, ByVal lstTechCode als Lijst (van TechnologySet), ByVal intSelectedYear als Geheel) als Lijst (van DataSetClass)
        Schemerige datasetlist als Nieuwe Lijst (van DataSetClass)
        Schemerige CnSql als SqlConnection = BadsDB.GetConnection
        Schemerige cmdA als SqlCommand
        Schemerige lezer als SqlDataReader = niets
        cmdA = Nieuwe SqlClient.SqlCommand („up_GetGraphReportDataset“, CnSql)
        cmdA.CommandTimeout = 7200
        Probeer
            Voor Elk t als TechnologySet in lstTechCode
                Met cmdA
                    .CommandType = CommandType.StoredProcedure
                    . Parameters.AddWithValue („@MetricName“, strMetricName.ToString)
                    . Parameters.AddWithValue („@InputCode“, strInputCode.ToString)
                    . Parameters.AddWithValue („@TechnologySetCode“, t.TechnologySetCode.ToString)
                    . Parameters.AddWithValue („@BudgetYear“, intSelectedYear)
                Eind met
                Als CnSql.State = ConnectionState.Closed toen
                    CnSql.Open ()
                Eind als
                lezer = cmdA.ExecuteReader (CommandBehavior.CloseConnection)
                Schemerige DataVersionIdOrd als Geheel = reader.GetOrdinal („DataVersionId“)
                Schemerige dsc als DataSetClass
                Doe terwijl lezer. Lees
                    dsc = Nieuwe DataSetClass
                    dsc.DataVersionId = reader.GetString (DataVersionIdOrd)
                    datasetlist. Voeg toe (dsc)
                Lijn
            lezer. Sluit ()
            cmdA.Parameters.Clear ()
            Daarna


        Vangst excA als SqlException
            MsgBox (excA.Message, excA.GetType.ToString)
        Tot slot
            CnSql.Close ()
        Het eind probeert
        Datasetlist van de terugkeer
    De Functie van het eind
Andere oplossingen  
 
programming4us programming4us