猿问

已经有一个与此命令关联的打开的 DataReader

我创建了 3 个下拉列表,我想按学生姓名、父亲姓名或序列号进行搜索。当我选择学生姓名或父亲姓名并写下姓名时,它会显示数据。但是当我选择“按序列号”搜索时,出现错误:

已经有一个DataReader与此命令关联的打开,必须先关闭。

错误代码

搜索截图

我试图关闭 dataReader 但它不起作用。

protected void btnSearch_Click(object sender, EventArgs e)

{

        string QueryStudent = "Select SerialNumber as [Serial No.], Name as [Student Name], FatherName as Father,Phone,Course, AdmissionDate as[Admission date], Status from tblStudents where Name= '" + txtSearch.Text + "'";

        string QueryFather = "Select SerialNumber as [Serial No.], Name as [Student Name], FatherName as Father,Phone,Course, AdmissionDate as[Admission date], Status from tblStudents where FatherName= '" + txtSearch.Text + "'";

        string QuerySerial = "Select SerialNumber as [Serial No.], Name as [Student Name], FatherName as Father,Phone,Course, AdmissionDate as[Admission date], Status from tblStudents where SerialNumber= '" + txtSearch.Text + "'";


        con.Open();


        using (var sqlCommand = new SqlCommand(QueryStudent, con))

        using (var sqlCommand2 = new SqlCommand(QueryFather, con))

        using (var sqlCommand3 = new SqlCommand(QuerySerial, con))

        {

            SqlDataReader reader = sqlCommand.ExecuteReader();


            if (DropDownList.SelectedItem.Value == "By Student Name")

            {

                if (!reader.HasRows)

                {

                    GrindSearch.Visible = false;

                    lblmsg.Visible = true;

                    lblmsg.Text = "No Record found";

                }


暮色呼如
浏览 89回答 2
2回答

犯罪嫌疑人X

您可以通过将 MultipleActiveResultSets=true 添加到连接字符串的提供程序部分来解决此问题。

冉冉说

该"By Serial Number"子句不以相同的reader.Close();开头"By Father Name"。但更一般地说,您对该读者的管理是脆弱的。它应该在一个using(...) {...}块中管理。而且,相关的,算法结构看起来远非高效。当DropDownList.SelectedItem.Value == "By Serial Number"您已经执行了 QueryStudent 时,永远不要使用它的结果。
随时随地看视频慕课网APP
我要回答