首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭连接/ MySqlDataReader不起作用

关闭连接/ MySqlDataReader不起作用
EN

Stack Overflow用户
提问于 2017-09-09 01:03:12
回答 1查看 516关注 0票数 0

我有一个类,我的MysqlConnection在里面:

代码语言:javascript
复制
public class DB
{
    private static MySqlConnection _Connection;
    public static MySqlConnection Connection
    {
        get
        {
            if(_Connection == null)
            {
                string cs = string.Format("SERVER={0}; DATABASE={1}; UID={2}; PWD={3};", SERVER_ADRESS, DATABASE, UID, PWD);
                _Connection = new MySqlConnection(cs);
            }

            if(_Connection.State == System.Data.ConnectionState.Closed)
                try
                {
                    MessageBox.Show("MySQL Connection ist geschlossen. Öffne Sie");
                    _Connection.Open();
                }
                catch(MySqlException ex)
                {
                    switch (ex.Number)
                    {
                        case 0:
                            MessageBox.Show("Verbindung zum Server konnte nicht hergestellt werden.");
                            break;
                        case 1045:
                            MessageBox.Show("Ungültiger Benutzername/Passwort.");
                            break;
                        default:
                            MessageBox.Show(ex.Message);
                            break;
                    }
                }
            return _Connection;
        }
    }
}

因此,我可以在DB.Connection的所有其他类中使用此连接。

但现在我得到的是"DataReader已经打开了“。但是我所有的DataReader都在使用中。

我们从我的登录页面开始:

代码语言:javascript
复制
using (loginreader = cmd.ExecuteReader())
            {
                if (loginreader.Read())
                {
                    DB.Connection.Close();
                    return true;
                }
                else
                {
                    DB.Connection.Close();
                    return false;
                }
               loginreader.Close();
            } 

我猜这不管用。但是登录后的第一条错误消息是我在另一个类的第83行上得到的:

代码语言:javascript
复制
DataTable schema = null;

            using (var schemaCommand = new MySqlCommand("SELECT * FROM " + firmCustomerTablename, connection))
            {
                using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
                {
                    schema = reader.GetSchemaTable();
                }
            }

这也是在使用中。所以我不明白为什么我会得到这个错误。我猜关闭连接/ DataReaders不起作用。

在此更改之前,我对每个站点都有连接。但是我的程序没有好的性能。因此,我决定建立一个总是打开的连接,并只调用对这个打开的连接的查询。现在我得到了DataReader错误。

谁能给我解释一下,为什么使用不能关闭DataReader?第83行不是一个变量,它是一个变量,所以我不知道为什么我在这一行得到了这个错误。,DataReader。

EN

回答 1

Stack Overflow用户

发布于 2017-09-09 01:51:54

听起来你的问题是关于连接状态管理的?我可能没有完全理解您的要求,但是根据设计,连接上下文中的using语句将关闭连接。它们是try {} catch {} finally的语法糖。我经常看到Connection对象、Command对象等不使用IDisposable,没有被正确地释放/关闭的例子。

在这段代码中,我没有看到要执行命令的连接再次打开。

代码语言:javascript
复制
 DataTable schema = null;

        using (var schemaCommand = new MySqlCommand("SELECT * FROM " + firmCustomerTablename, connection))
        {
            using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
            {
                schema = reader.GetSchemaTable();
            }
        }

这是一个基本的想法:

代码语言:javascript
复制
        using (var conn = new SqlConnection(connectionString: ""))
        {
            conn.Open();

            using (var cmd = new SqlCommand(cmdText: "cmdText", connection: conn))
            {
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        //
                    }
                }
            }

        }

文档:MSDN SqlConnection Class

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

https://stackoverflow.com/questions/46121412

复制
相关文章

相似问题

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