C# 为什么我会得到一个“;“连接已打开”;MySQL更新语句期间出错?

C# 为什么我会得到一个“;“连接已打开”;MySQL更新语句期间出错?,c#,winforms,C#,Winforms,我正在用Winforms、MySQL和C#做一个大学出勤项目 在这方面,我想更新一个表中的“全部缺席”和“全部出席”。所以我为此编写了代码: int p = 0; int a = 0; string sno = ""; MySqlDataReader Reader; command.CommandText = "select * from attendance_monthly_rpt"; connection.Open(); Reader = command.ExecuteReader();

我正在用Winforms、MySQL和C#做一个大学出勤项目

在这方面,我想更新一个表中的“全部缺席”和“全部出席”。所以我为此编写了代码:

int p = 0;
int a = 0;
string sno = "";

MySqlDataReader Reader;
command.CommandText = "select * from attendance_monthly_rpt";
connection.Open();
Reader = command.ExecuteReader();           

while (Reader.Read())
{
    p = 0;
    a = 0;
    sno = Reader[1].ToString();
    for (int k = 3; k <= 33; k++)
    {
        if ((Reader[k].ToString() == "P") || (Reader[k].ToString() =="OD"))
        {
            p += 1;
        }
        else if (Reader[k].ToString() == "Ab")
        {
            a += 1;
        }
    }
}
connection.Close();
这会引发错误“连接已打开”。如果将update语句放在循环之后,则只会得到最后一条记录


请帮助我为每个“学生”更新我的“Tot缺席”、“Tot出席”。

您正在while循环外打开连接,然后再次尝试打开相同的连接,在while循环内创建一个新连接,或保持连接打开,执行需要执行的操作,然后关闭连接。

您可以使用此选项检查连接的状态:

if (myConnection.State != ConnectionState.Open)
{
    myConnection.Open();
}
别忘了使用try、catch和finally

finally
{
     myConnection.Close();
} 

删除大部分与打开或关闭连接无关的内容后,请查看代码:

…
connection.Open();       // <--------------+
…                        //                |
                         //                |
while (…)                //                |
{                        //                |
    …                    //                |
    connection.Open();   // the connection is already open
    …
    connection.Close();  // <--------------+
}                        //                |
connection.Close()       // likewise, it'll already be closed here

connection.Open();//使用两个不同的连接,一个用于更新,另一个用于选择读卡器。我只想使用diff连接吗?。还是命令?我不知道回滚。不幸的是我点击了。
…
connection.Open();       // <--------------+
…                        //                |
                         //                |
while (…)                //                |
{                        //                |
    …                    //                |
    connection.Open();   // the connection is already open
    …
    connection.Close();  // <--------------+
}                        //                |
connection.Close()       // likewise, it'll already be closed here