gpt4 book ai didi

c# - MySqlDataReader - 阅读器关闭时尝试读取无效

转载 作者:行者123 更新时间:2023-11-29 18:26:43 37 4
gpt4 key购买 nike

我很高兴以前有人问过这个问题,但是,我在过去 5 天里一直在搜索 SO 和网络,但尚未找到解决我的问题的方法。

我正在尝试使用 C# 从 MySQL 数据库检索记录。

代码编译得很好,但是当我测试应用程序并尝试将数据绑定(bind)到 DataTable() 时,MySqlDataReader 抛出以下异常

"Invalid Attempt to Read When Reader Is Closed"

我无法诊断该问题;据我所知,在我尝试读取之前,阅读器并未关闭。

方法如下:

    /// <summary>
/// Performs a select statement
/// </summary>
/// <param name="query">String of the SQL Query</param>
/// <param name="parameters">List of SQL Parameters</param>
/// <returns>DataTable</returns>
public DataTable SelectQuery(string query, List<MySqlParameter> parameters)
{
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand cmd = new MySqlCommand(query, connection);
foreach(MySqlParameter p in parameters)
{
cmd.Parameters.Add(p);
}

connection.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}

实际的数据库连接工作正常,我在 MySqlConnection 上放置了一个监视,并且连接正在按预期打开。

我将以下查询传递给此方法:

string query = "SELECT IDS_USER, USRNM, PSSWRD, USR_SALT FROM factUser WHERE USRNM = ?username";

我在 MySql Workbench 中进行了测试,它返回了正确的数据。

当我查看 MySqlCommand 时,参数已按原样添加到命令中。

任何帮助将不胜感激,因为我完全被难住了!

最佳答案

您已经很接近了,但您必须将 ExecuteReader() 函数设置为 MySqlDataReader。另外,您应该真正养成使用 using 语句的习惯,尤其是在 SQL 相关事务中,如果您没有正确处理连接,您很快就会耗尽。使用 using 语句会自动处理 using 语句中的项目。

带有适当变量集的代码

MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand cmd = new MySqlCommand(query, connection);
foreach(MySqlParameter p in parameters)
{
cmd.Parameters.Add(p);
}

connection.Open();
DataTable dt = new DataTable();
MySqlDataReader reader = cmd.ExecuteReader();
dt.Load(reader);
return dt;

使用适当的 using 语句

using(MySqlConnection connection = new MySqlConnection(connectionString)){
using(MySqlCommand cmd = new MySqlCommand(query, connection)){
foreach(MySqlParameter p in parameters)
{
cmd.Parameters.Add(p);
}

connection.Open();
DataTable dt = new DataTable();
using(MySqlDataReader reader = cmd.ExecuteReader()){
dt.Load(reader);
return dt;
}
}
}

关于c# - MySqlDataReader - 阅读器关闭时尝试读取无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46124889/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com