gpt4 book ai didi

c# - 关闭 MySqlDataReader 的问题

转载 作者:行者123 更新时间:2023-11-29 05:43:13 25 4
gpt4 key购买 nike

我在关闭 MySqlDataReader 时遇到问题。似乎 .Close() 命令挂起。有谁知道如何解决这个问题?

    static void Main(string[] args)
{
MySqlConnection cn = new MySqlConnection("SERVER=svr;DATABASE=db;UID=uid;PASSWORD=pwd;");
cn.Open();

MySqlCommand cmd = new MySqlCommand("SELECT * FROM SOMETABLE", cn);
MySqlDataReader dr = cmd.ExecuteReader();
int ii = 0;

while (dr.Read())
{
Console.WriteLine(dr.GetValue(1).ToString());
if (ii++ > 10) break;
}
dr.Close();
cn.Close();
}

**注意:我已将代码更改为不使用静态对象。它仍然卡在 .Close()

最佳答案

我会使用 Using 关键字:

Using dr As MySqlDataReader = cmd.ExecuteReader()
...
End Using

(对 VB 语法感到抱歉)

编辑:如果在调用 Close 之前对命令调用 Cancel,您可能会获得更快的 Close 操作。无论如何,您的 Close 行为是一个奇怪的问题。

dr.Cancel();
dr.Close();
cn.Close();

edit2:做更多研究我发现如果您调用 Cancel 问题将得到解决,原因是您的“中断”指令。来源:http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=610

“程序挂起的原因是 SqlDataReader.Close 方法填写了输出参数、返回值和 RecordsAffected 的值。如果您尝试在读取器读取所有记录之前关闭读取器,Close 会尝试读取所有数据并填写这些值。如果您不关心这些值——如果您要跳出读取循环,您可能不关心这些值,您应该在调用 Close 之前取消底层命令。在在上述情况下,您要做的是在退出循环之前调用 command.Cancel。”

关于c# - 关闭 MySqlDataReader 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4806418/

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