当读卡器关闭时尝试读取无效-MySqlDataReader C#
在尝试从DataReader读取数据时,在my当读卡器关闭时尝试读取无效-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
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,不。。。这是一个安静而充分的回答