首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭MySqlDataReader时出现的问题

关闭MySqlDataReader时出现的问题
EN

Stack Overflow用户
提问于 2011-01-26 23:35:48
回答 2查看 2K关注 0票数 1

我在关闭MySqlDataReader时遇到问题。.Close()命令似乎挂起了。有没有人知道怎么解决这个问题?

代码语言:javascript
复制
    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()上

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-26 23:48:35

这可能与共享静态连接、命令和读取器对象有关。即使这不是这个特定问题的原因,也是一个非常好的主意。

您应该使用本地连接、命令和读取器变量。尽可能晚地创建它们;尽可能早地关闭它们。

试着这样做:

代码语言:javascript
复制
static void Main(string[] args)
{
     using (var conn = new MySqlConnection("..."))
     using (var cmd = new MySqlCommand("...", conn))
     {
         conn.Open();
         using (MySqlDataReader dr = cmd.ExecuteReader())
         {
             while (dr.Read())
             {
                 // do something
             }
         }
     }
}
票数 1
EN

Stack Overflow用户

发布于 2011-01-26 23:38:58

我会使用Using关键字:

代码语言:javascript
复制
Using dr As MySqlDataReader = cmd.ExecuteReader()
...
End Using

(很抱歉使用VB语法)

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

代码语言:javascript
复制
dr.Cancel();
dr.Close();
cn.Close();

edit2:我做了更多的研究,我发现如果你调用Cancel,问题就会解决,原因是你的"break“指令。来源:http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=610

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4806418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档