C# 读卡器关闭时读取数据的尝试无效错误

C# 读卡器关闭时读取数据的尝试无效错误,c#,winforms,C#,Winforms,在表单加载时,下面的代码运行良好。它以在计时器上运行的方法(间隔5秒)运行代码 我注意到,在DataGridView中抛出错误之前,它将填充2行。 不确定为什么会抛出“读卡器关闭时读取的尝试无效错误” 您的代码块已更正如下,可能对您有用: try { ..... using (MySqlConnection conn = new MySqlConnection(connString)) {

在表单加载时,下面的代码运行良好。它以在计时器上运行的方法(间隔5秒)运行代码

我注意到,在DataGridView中抛出错误之前,它将填充2行。 不确定为什么会抛出“读卡器关闭时读取的尝试无效错误”


您的代码块已更正如下,可能对您有用:

        try
        {
           .....

           using (MySqlConnection conn = new MySqlConnection(connString))
           {

            conn.Open();

            using (var cmd = new MySqlCommand("SELECT * FROM table", conn))
            {
                using (MySqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {                         

                        .....
                    }

                    reader.Close();                        
                }
                                    
                .....
            }

             conn.Close();
          }
        }           

为什么不在这里使用
语句创建
MySqlConnection
的实例,因为以下几个原因,这是最好的做法?你把它放在这里似乎不对。那么在哪里创建新连接呢?您不能使用disposed连接。没有必要使用
语句对
中的内容调用
Dispose()
。您也可以向上投票接受的答案:)从上面窃取@Amy的评论:“没有必要对using语句中的内容调用Dispose()。”或
Close()
。使用块可以为您实现这一点。
        try
        {
           .....

           using (MySqlConnection conn = new MySqlConnection(connString))
           {

            conn.Open();

            using (var cmd = new MySqlCommand("SELECT * FROM table", conn))
            {
                using (MySqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {                         

                        .....
                    }

                    reader.Close();                        
                }
                                    
                .....
            }

             conn.Close();
          }
        }