为什么我的C#应用程序仍然不使用connection.Open()从MySql检索数据

为什么我的C#应用程序仍然不使用connection.Open()从MySql检索数据,c#,mysql,database,C#,Mysql,Database,我尝试使用我的C#应用程序从MySql上的表中检索数据。因此,我应用了常用的连接方法,以便将我的c#应用程序连接到我的MySql数据库,并调用了适当的方法从表中检索数据,然后将其显示在我的应用程序上。但是,我注意到,通过使用以下代码: conString = "server=localhost;user id=" + user + ";database=db;password="+pass; connection = new MySqlConnection(conString); DataTab

我尝试使用我的C#应用程序从MySql上的表中检索数据。因此,我应用了常用的连接方法,以便将我的c#应用程序连接到我的MySql数据库,并调用了适当的方法从表中检索数据,然后将其显示在我的应用程序上。但是,我注意到,通过使用以下代码:

conString = "server=localhost;user id=" + user + ";database=db;password="+pass;
connection = new MySqlConnection(conString);
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM users", connection);
adapter.Fill(table);
dataGridView1.DataSource = table;
我可以从表中检索数据并显示,无需使用以下代码:

connection.Open();
如果我只需要以下代码来检索数据,那么使用
connection.Open()
的目的是什么?我什么时候需要使用
connection.Open()


只有当我从应用程序向mysql发送信息时,我才需要使用
connection.Open()
,但是当我想从mysql获取/检索信息时,我就不需要使用
connection.Open()
,这对吗

由于调用
adapter.Fill(表)的意图
是从数据库中检索数据,我希望
Fill
方法能够打开连接(如果还没有)

如果要直接操作
连接
,而不是通过诸如
MySqlDataAdapter
之类的帮助器类,则只需显式调用
Open
。你当然可以随时打开它

但是,我建议您使用语句将连接放入一个
中,以确保在处理完后关闭并处置它:

using (var connection = new MySqlConnection(conString))
{
    DataTable table = new DataTable();
    MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM users", connection);
    adapter.Fill(table);
    dataGridView1.DataSource = table; 
}
// Now you are sure the connection is closed and being properly garbage collected

我没有使用这个MySql库,但我确信当您调用
adapter.Fill(table)
@xerilio时,
MySqlDataAdapter
正在为您打开连接。谢谢。那么,您何时知道何时使用connection.Open()?或者,当您第一次使用前两行代码连接到数据库时,允许调用它可以吗?DataAdapter派生的类总是在发现连接关闭时打开连接本身。如果它打开了,那么它也会在完成时关闭。因此,如果您计划使用适配器,您实际上不需要打开。对于其他ADO.NET对象(如DbCommand派生的classIs),情况并非如此。将连接保持打开数小时/天是错误的。或者,您应该只在需要时打开连接,然后关闭它吗?将连接保持打开状态达数天/小时的后果是什么?在极端情况下,您还可以完全删除MySqlConnection对象。DbDataAdapter基类有一个直接获取连接字符串的构造函数。在不需要连接时关闭连接(如果可能,请使用
using(){}
)。关闭和重新打开它们的成本不高,因为MySql的Connector.NET默认提供连接池。正如@O.Jones所建议的,在不需要时应该关闭它们。我不能为这个特定的库说话,但我看到过一些例子,长时间运行的连接性能越来越差——这可能是由于配置不当造成的,但我仍然认为最好不要将其打开超过需要的时间。确实如此。每次需要时,使用
建立连接。它们很便宜。