Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当读卡器关闭时尝试读取无效-MySqlDataReader C#_C#_Sql_.net_Mysqldatareader - Fatal编程技术网

当读卡器关闭时尝试读取无效-MySqlDataReader C#

当读卡器关闭时尝试读取无效-MySqlDataReader C#,c#,sql,.net,mysqldatareader,C#,Sql,.net,Mysqldatareader,在尝试从DataReader读取数据时,在myduplicateNameCheck方法中,当读卡器关闭时,获取一个无效的读取尝试异常。我不知道为什么。非常感谢您的帮助 public static MySqlConnection GetSqlConnection() { MySqlConnection connection = new MySqlConnection(connectionString); return connection; } public static My

在尝试从DataReader读取数据时,在my
duplicateNameCheck
方法中,当读卡器关闭时,获取一个
无效的读取尝试
异常。我不知道为什么。非常感谢您的帮助

public static MySqlConnection GetSqlConnection() {
    MySqlConnection connection = new MySqlConnection(connectionString);

    return connection;
}

public static MySqlDataReader ExecuteReader(string sqlQuery, MySqlConnection connection) {
    using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) {     
        try {
            connection.Open();                                      
            MySqlDataReader sqlReader = command.ExecuteReader();    

             return sqlReader;                                       
         } catch (Exception ex) {
             MessageBox.Show(ex.Message);                            
             return null;                                            
         }
    }
}

public static bool duplicateNameCheck(string inName) {
    String sqlQuery = "SELECT * FROM Account";    

    using (MySqlDataReader sqlReader = SQLHelper.ExecuteReader(sqlQuery, SQLHelper.GetSqlConnection())) {

        while (sqlReader.Read())
        {                     
            if (inName.Equals(sqlReader[1].ToString(), StringComparison.InvariantCultureIgnoreCase))
            {  
                return true;
            }
        }
    }
    return false;                                       
}

您正在处理SqlCommand,然后再尝试使用它生成的SqlReader。它们都需要保持打开状态,直到您使用完读取器。

不要在
SQLHelper.ExecuteReader()
中捕获异常并返回null。在这种情况下,你是在假装整个事情没有完全失败。但确实如此。它完全失败了,并且调用方没有返回SqlDataReader。这就是例外。捕获可能属于
duplicateNameCheck()
,也可能属于其调用者。但不是在那里。考虑到glenebob的有效和重要的观点,整个助手的事情似乎毫无意义。所有的
MySql*
都是关于什么的?当
MySqlCommand
被释放时(在using块退出之前),读卡器也被释放,因为
MySqlCommand
创建了它。当读卡器被释放时,它也被关闭。我不确定连接是否仍然打开或关闭;因为连接对象是在外部创建的,所以不应该关闭它(测试和发现它会很有趣)。您可能应该解释
使用
做了什么。虽然我知道
使用
做了什么,但当我使用
Sql
而不是
MySql
时,它工作得很好,这是我必须切换到的东西。你使用得对,只是命令在阅读器关闭(释放)时释放阅读器,这不是完全直观的。我理解他的意思,修复了它,现在它工作了。@user9405863,不。。。这是一个安静而充分的回答