gpt4 book ai didi

c#,当只有 1 个读取器时,我一直捕获多个 MySQL 读取器异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:58 25 4
gpt4 key购买 nike

我有一个用 C# 编写的 Windows 窗体应用程序,其中一个按钮运行如下代码:

private void aCertainButton_Click(object sender, EventArgs e)
{
if (folderFinder.ShowDialog() == DialogResult.OK)
{
if (openConnection())
{
foreach (Thingy stuff in aCertainCollection)
{
string sqlCommandString = "SELECT COUNT(*) FROM thatTable WHERE someField = " + stuff.property + ";";
try
{
MySqlCommand count = new MySqlCommand(sqlCommandString, connection);
int rowCount = 0;
object o = count.ExecuteScalar();
if (o != null)
{
rowCount = int.Parse(o.ToString());
}

if (rowCount == 1)
{
MySqlCommand cmd = new MySqlCommand("SELECT * FROM thatTable WHERE someField = " + stuff.property + ";", connection);
MySqlDataReader reader = cmd.ExecuteReader();

//Processing stuff from the reader here

reader.Close();
reader.Dispose();
}
}
catch (MySqlException mex)
{
Console.WriteLine(mex.Message);
}
}
closeConnection();
}
}
}

每当我运行该应用程序时,我都会捕获以下异常:“已经有一个打开的 DataReader 与此连接关联,必须先将其关闭。”

但不应该有。我在此代码中使用了 1 个阅读器,没有其他异步运行。如您所见,我在循环中的每次迭代后关闭阅读器并打开一个新阅读器。在应用程序的初始化过程中,我使用了与同一连接相关联的阅读器,但是当它的数据处理完成后,我关闭并处理了它。

如果有人能帮助我解开这个谜团,我将不胜感激,谢谢。

最佳答案

在您的代码中,如果某些东西在名为“processing stuff”的部分生成异常,那么您将让阅读器保持打开状态。

如果您需要确保某些东西在使用后即使在异常情况下也能被处置,那么请使用 using 子句:

if (rowCount == 1)
{
MySqlCommand cmd = new MySqlCommand("SELECT * FROM thatTable WHERE someField = " + stuff.property + ";", connection);
using(MySqlDataReader reader = cmd.ExecuteReader())
{

//Processing stuff from the reader here

}
}

关于c#,当只有 1 个读取器时,我一直捕获多个 MySQL 读取器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146878/

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