wenn Sie setzen mehrere sql-Befehle zeigt Fehler :Es ist bereits ein geöffneter DataReader zugeordnet diesen Befehl, der zuerst geschlossen werden
Freunde, wenn ich Schreibe diesen code in asp.net ich erhalte eine Fehlermeldung wie diese:
Es ist bereits ein geöffneter DataReader zugeordnet diesen Befehl, die
muss zuerst geschlossen werden
mir bitte helfen
SqlConnection con = obj.getcon();
con.Open();
SqlCommand cmd = new SqlCommand("select student_id from student_details", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
String ss=dr[0].ToString();
if (val == ss)
{
SqlCommand cmd1 = new SqlCommand("insert student_vs_testsession_details(student_id,testsession_id,testsession_status) values('" + val + "','" + Test + "','')", con);
int val1 = cmd1.ExecuteNonQuery();
}
else
{
string message = "<script language=JavaScript> alert('StudentID does not exists!'); </script>";
if (!Page.IsStartupScriptRegistered("clientScript"))
{
Page.RegisterStartupScript("clientScript", message);
}
}
}
dr.Close();
//con.Close();
}
Do NICHT inline-Parameter in SQL Statements! Es ist der Schnellste Weg, Probleme zu haben, mit-Injektion-Attacken (Nein, die Flucht der Eingang ist nicht ausreichend) - werfen Sie einen Blick auf, wie der Verwendung von parametrisierten Abfragen.
danke.. aber nach eingestellt ich habe den gleichen Fehler
danke.. aber nach eingestellt ich habe den gleichen Fehler
InformationsquelleAutor nsds | 2013-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die änderung Ihres Verbindungs-Zeichenfolge und fügen Sie diese option
Ab SQL Server 2005 gibt es MARS option.
Mit MARS eine einzige geöffnet Verbindung dienen könnte, mehr als ein Befehl gleichzeitig.
So, zum Beispiel, wird die Verbindungszeichenfolge sollte das so sein
Siehe die Dokumentation auf dem MARS
In einem 'normalen' Konfiguration, wenn eine SqlDataReader geöffnet ist, wird das SqlConnection-Objekt ist ausgelastet Dienste der Leser und nicht akzeptieren können, die anderen Befehle.
(Siehe Anmerkungen auf den link SqlDataReader).
Dein code oben hat einen reader geöffnet, wenn Sie versuchen, einen Befehl über die gleiche Verbindung.
Es gibt Möglichkeiten, wie DataSet füllen und die Schleife über es (aber für große Mengen dies wird Auswirkungen auf Leistungen), so dass das SQL-Team bei Microsoft eingeführt MARS
danke somuch 🙂
InformationsquelleAutor Steve
Ich schlage vor, Sie nicht zu verwenden verschachtelte sql, verlangsamt sich die Leistung der Anwendung, aber die Verwendung von SQL massiven einfügen. So könnten Sie den code ändern zu:
InformationsquelleAutor depoip
Können Sie nicht führen Sie mehrere befehlsanweisungen für die gleiche Verbindung, während der datareader ist auf... verwenden Sie stattdessen SqlDataAdapter.. Mit dataadapter und DataSet machen Ihre Arbeit einfacher..
MultipleActiveResultSets=True;
in der Verbindungszeichenfolge können.InformationsquelleAutor bhavikp7