“连接必须有效且打开” - DataReader 问题

Posted

技术标签:

【中文标题】“连接必须有效且打开” - DataReader 问题【英文标题】:"Connection must be valid and open" - DataReader problem 【发布时间】:2019-04-06 12:20:09 【问题描述】:

我正在尝试从数据库中获取所有年龄不足的用户,但是当我尝试时,System.InvalidOperationException: 'Connection must be valid and open.' 弹出。这是一个 Windows 窗体应用程序,所以当我按下按钮时会发生这种情况。

我已尝试搜索问题,但找不到错误。我还有 5 个具有相同语法的函数,它们工作得很好。这是我的代码:

public static List<User> Underage(mysqlConnection connection)
        
            string query= string.Format("SELECT * FROM users WHERE age<18");
            MySqlCommand command = new MySqlCommand(query, connection);
            MySqlDataReader reader = command.ExecuteReader();

            List<User> underage= new List<User>();
            if (reader.HasRows)
            
                User usu = new User();
                while (reader.Read())
                
                    usu.id = reader.GetInt16(0);
                    usu.name = reader.GetString(1);
                    usu.surname= reader.GetString(2);
                    usu.email = reader.GetString(3);
                    usu.age= reader.GetInt16(4);
                    usu.birth = reader.GetDateTime(5);
                    usu.payment= reader.GetFloat(6);
                    underage.Add(usu);
                
            
            return underage;
        

无论如何,谢谢,如果这是一个愚蠢的问题,我很抱歉,但我就是想不通。

【问题讨论】:

如果你能提供一个minimal reproducible example,包括如何声明和实例化连接,那就太棒了。 如果我无法将其复制并粘贴到控制台应用程序中并按原样运行以重现该问题 - 它还不是 minimal reproducible example。 几乎可以肯定你忘记打开连接,或者之前关闭它。 听起来您从未打开过连接。消息似乎很清楚。你在这段代码之前运行了 connection.open() 吗? 【参考方案1】:

感谢 mjwills 和 Adyson 澄清我的问题,你说得对,我忘了打开它。我有一个功能可以打开我在程序的所有其他方法中使用的连接,但我忘记在这个方法中添加它。对不起,谢谢!

【讨论】:

以上是关于“连接必须有效且打开” - DataReader 问题的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试将值添加到数据库中,但每次我尝试添加一些东西时,我都会收到错误消息“连接必须有效且打开。”

DataReader 中的 DataReader

DataReader

dataset 和 datareader对象有啥区别

为啥 DataTable 比 DataReader 快

DataReader:指定的强制转换无效 (Int32)