执行读取器永远不会返回

发布于 2024-08-07 01:56:36 字数 1100 浏览 3 评论 0原文

我通过 devart dotconnect 使用 mysql。上面的代码是多线程类的一部分。

public  void DoQuery(ref Devart.Data.MySql.MySqlDataReader Dr, string QryStr)
        {
            lock (locker)
            {
               //Program.MyMutex.WaitOne();
                Devart.Data.MySql.MySqlCommand Command = new Devart.Data.MySql.MySqlCommand();
                int ThreadID = Convert.ToInt32(Thread.CurrentThread.Name);
                MySqlConnection FCon = Program.Con[ThreadID];
                if (FCon.State != System.Data.ConnectionState.Open) Program.Con[ThreadID] = Program.BuildDbConnection();
                Command.Connection = FCon;
                Command.CommandTimeout = 0;
                Command.FetchAll = true;
                Command.CommandText = QryStr;
                if (Dr != null) Dr.Dispose();
                if (QryStr.Substring(0, 6).Equals("select", StringComparison.CurrentCultureIgnoreCase) != true) Command.ExecuteNonQuery(); else Dr = Command.ExecuteReader(); this line randomly stuck on ExecuteReader.
                Command.Dispose();
            }
        }

i am using mysql via devart dotconnect. above code is part of the multithreaded class.

public  void DoQuery(ref Devart.Data.MySql.MySqlDataReader Dr, string QryStr)
        {
            lock (locker)
            {
               //Program.MyMutex.WaitOne();
                Devart.Data.MySql.MySqlCommand Command = new Devart.Data.MySql.MySqlCommand();
                int ThreadID = Convert.ToInt32(Thread.CurrentThread.Name);
                MySqlConnection FCon = Program.Con[ThreadID];
                if (FCon.State != System.Data.ConnectionState.Open) Program.Con[ThreadID] = Program.BuildDbConnection();
                Command.Connection = FCon;
                Command.CommandTimeout = 0;
                Command.FetchAll = true;
                Command.CommandText = QryStr;
                if (Dr != null) Dr.Dispose();
                if (QryStr.Substring(0, 6).Equals("select", StringComparison.CurrentCultureIgnoreCase) != true) Command.ExecuteNonQuery(); else Dr = Command.ExecuteReader(); this line randomly stuck on ExecuteReader.
                Command.Dispose();
            }
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

变身佩奇 2024-08-14 01:56:36

您通过 Dr 只是为了稍后处理它吗?您还应该从阅读器中读取以获取数据。

while (reader.Read())
    {
        Console.WriteLine(String.Format("{0", reader[0]));
    }

You are passing Dr only to do dispose it later? You also should read from reader to get data.

while (reader.Read())
    {
        Console.WriteLine(String.Format("{0", reader[0]));
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文