【问题标题】:Executing multiple readers in ASP.Net c#在 ASP.Net c# 中执行多个阅读器
【发布时间】:2017-10-29 13:13:24
【问题描述】:

我正在尝试在 C# 中使用迭代来清理编写相同查询但使用不同参数和绑定数据等的冗长重复过程。

但是我在使用同一个阅读器时遇到了问题。

这是我现在的代码:

private void bindData()
{
    string cs = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    using (SqlConnection connection = new SqlConnection(cs))
    {
        connection.Open();

        string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };

        for (int i = 0; i < 7; i++)
        {
            SqlCommand command = new SqlCommand("SELECT Name AS 'Class Name', FirstName AS 'Instructor First Name', LastName AS 'Instructor Last Name', LessonDuration AS 'Lesson Duration (hrs)', LessonTime AS 'Lesson Start' FROM Lesson, Class, Instructor WHERE Lesson.ClassID = Class.ClassID AND Lesson.InstructorID = Instructor.InstructorID AND LessonDay = '@Day';", connection);
            command.Parameters.AddWithValue("@Day", days[i]);

            using(SqlDataReader dr = command.ExecuteReader())
            {
                switch (days[i])
                {
                    case "Monday":
                        GridView1.DataSource = dr;
                        DataBind();
                        break;
                    case "Tuesday":
                        GridView2.DataSource = dr;
                        DataBind();
                        break;
                    case "Wednesday":
                        GridView3.DataSource = dr;
                        DataBind();
                        break;
                    case "Thursday":
                        GridView4.DataSource = dr;
                        DataBind();
                        break;
                    case "Friday":
                        GridView5.DataSource = dr;
                        DataBind();
                        break;
                    case "Saturday":
                        GridView6.DataSource = dr;
                        DataBind();
                        break;
                    case "Sunday":
                        GridView7.DataSource = dr;
                        DataBind();
                        break;
                }
                dr.Close();

            }


        }
        connection.Close();
    }
}

如您所见,关键是将不同的查询绑定到代表一周中不同日子的不同网格视图。

我不断收到“无效的 fieldcols 数据阅读器已关闭”或“请在再次阅读之前关闭”的错误(如果 dr.close(); 已删除)。

这个问题有解决办法吗?谢谢你。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    在 switch 语句的所有情况下,您都在调用父类的 DataBind() 方法。此方法将调用它包含的所有数据绑定控件的 DataBind() 方法。

    因此,一周中的每一天都会调用所有 GridView 的 DataBind() 方法。如果你每次都关闭数据读取器,你会得到在再次读取之前关闭它的消息,如果你不这样做,你会得到那些已经读取的没有返回数据。

    要么将 DataBind() 调用移到 for 循环之外,要么改为调用 GridView[X].DataBind()。例如

    case "Monday": GridView1.DataSource = dr; GridView1.DataBind(); break; case "Tuesday": GridView2.DataSource = dr; GridView2.DataBind(); break;

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2020-02-01
    相关资源
    最近更新 更多