“如何调试”;已经有一个打开的DataReader与此命令关联,必须先关闭该命令";在C#中?

“如何调试”;已经有一个打开的DataReader与此命令关联,必须先关闭该命令";在C#中?,c#,asp.net,.net,C#,Asp.net,.net,我已经编写了从数据库中过滤数据的代码(过滤由两个dropdownlists和两个日期之间完成)。我犯了一个错误 已存在与此命令关联的打开的DataReader,必须先关闭该命令 在中使用命令时,不需要执行读取器,这是在da.Fill中隐式完成的。因此,请删除第一行: cmddeptall.ExecuteReader(); SqlDataAdapter da = new SqlDataAdapter(cmddeptall); 问题是您没有正确处理任何对象。您应该按如下所述进行数据库调用: va

我已经编写了从数据库中过滤数据的代码(过滤由两个dropdownlists和两个日期之间完成)。我犯了一个错误

已存在与此命令关联的打开的DataReader,必须先关闭该命令


在中使用命令时,不需要执行读取器,这是在
da.Fill中隐式完成的。因此,请删除第一行:

cmddeptall.ExecuteReader();
SqlDataAdapter da = new SqlDataAdapter(cmddeptall);

问题是您没有正确处理任何对象。您应该按如下所述进行数据库调用:

var ds = new DataSet();
if ((ddldept.SelectedValue == "all") && (ddldesig.SelectedValue != "all"))
{
    using (var con = new SqlConnection(constring))
    {
        con.Open();
        string desig = ddldesig.SelectedValue;
        DateTime mydate;
        mydate = Convert.ToDateTime(tbfrom.Text);
        string from = Convert.ToString(mydate);
        mydate = Convert.ToDateTime(tbto.Text);
        string to = Convert.ToString(mydate);
        using (var cmddeptall = new SqlCommand("select * from registration where Department IN('Computer Science Engineering','Mechanical Engineering','Electrical And Electronics','Electronics And Communication','Civil Engineering','Science And Humanity') AND PostAppliedFor='" + desig + "' AND (RegisteredDate BETWEEN '" + from + "' AND '" + to + "')", con))
        {
            using (var da = new SqlDataAdapter(cmddeptall))
            {
                da.Fill(ds, "registration");
            }
        }
    }
}
else if ((ddldept.SelectedValue == "all") && (ddldesig.SelectedValue == "all"))
{
    // Code Here
}
else if ((ddldept.SelectedValue != "all") && (ddldesig.SelectedValue != "all"))
{
    // Code Here
}

注意:此外,我建议您创建单独的函数来调用数据库并根据您所做的查询检索数据集。不需要一次又一次地编写相同的代码

当你问一个问题时,请把你的代码缩小到一个小范围,而不是发布你所有的代码。然后说错误发生在哪一行。你得到的错误,基本上告诉你什么是错误的我的错误被整理出来了,但我无法得到过滤的准确结果。。可能是因为calander文本框的日期格式…非常感谢,它帮了我很多…但我没有得到过滤的结果。。。我已在da.Fill(ds,“注册”)项下添加;GridView1.DataSourceID=String.Empty;GridView1.DataSource=ds;GridView1.DataBind();我无法得到两个日期之间的过滤结果(文本框有日历)。。使用dropdownlist进行过滤的结果正在运行我对日期格式有问题。。如何格式化?@SufiaBano:你的查询一定有问题。复制数据库查询并尝试在SQL Server上执行,然后检查查询出了什么问题。
var ds = new DataSet();
if ((ddldept.SelectedValue == "all") && (ddldesig.SelectedValue != "all"))
{
    using (var con = new SqlConnection(constring))
    {
        con.Open();
        string desig = ddldesig.SelectedValue;
        DateTime mydate;
        mydate = Convert.ToDateTime(tbfrom.Text);
        string from = Convert.ToString(mydate);
        mydate = Convert.ToDateTime(tbto.Text);
        string to = Convert.ToString(mydate);
        using (var cmddeptall = new SqlCommand("select * from registration where Department IN('Computer Science Engineering','Mechanical Engineering','Electrical And Electronics','Electronics And Communication','Civil Engineering','Science And Humanity') AND PostAppliedFor='" + desig + "' AND (RegisteredDate BETWEEN '" + from + "' AND '" + to + "')", con))
        {
            using (var da = new SqlDataAdapter(cmddeptall))
            {
                da.Fill(ds, "registration");
            }
        }
    }
}
else if ((ddldept.SelectedValue == "all") && (ddldesig.SelectedValue == "all"))
{
    // Code Here
}
else if ((ddldept.SelectedValue != "all") && (ddldesig.SelectedValue != "all"))
{
    // Code Here
}