C#MySql MySqlConnection使整个程序保持打开状态

本文关键字:状态 程序 MySqlConnection C#MySql | 更新日期: 2023-09-27 17:59:27

所以我想做的是打开一个MysqlConnection,然后永远不要为整个应用程序关闭它(直到最后)。

我有这个:

static void Main(string[] args)
{
    OpenCon();
}
public static MySqlConnection OpenCon()
{
    MySqlConnection masterOpenCON = new MySqlConnection(SQLStringClass.masterConString);
    masterOpenCON.Open();
    return masterOpenCON;
}

然而,我相信这将持续打开连接,我如何打开一次连接并在整个应用程序中引用连接。这就是我现在的称呼。

try
{
    MySqlCommand mysqlprocessCmdInsertItem = new MySqlCommand(SQLStringClass.mySQLCOMMAND, OpenCon());
    mysqlprocessCmdInsertItem.ExecuteNonQuery();
}

C#MySql MySqlConnection使整个程序保持打开状态

不要为此烦恼。MySQL ADO.NET连接器使用一个连接池,这意味着当您在连接上调用.Open时,您实际上并没有打开它,而是从现有的连接池中提取它;当您调用.Close时,您并没有关闭它,而是将它返回到连接池,以便可以重用。

IIRC连接池在默认情况下是启用的,但您可以使用连接字符串上的以下参数来控制它:

  • 池=真
  • 最大池大小=100
  • 最小池大小=0

因此,当您想要发送SQL查询时,您只需要执行以下操作,并让ADO.NET框架担心连接:

using (var conn = new MySqlConnection(SQLStringClass.masterConString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "SELECT Foo FROM Bar";
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            ...
        }
    }
}

我建议您避免任何静态成员和手动连接处理。

您需要将连接存储在static字段或属性中。

例如:

public static MySqlConnection Connection { get; private set; }
Connection = OpenCon();

您还需要将连接对象指定为静态。

private static MySqlConnection masterOpenCON;
static void Main(string[] args)
{
    OpenCon();
}
public static MySqlConnection OpenCon()
{
    masterOpenCON = new MySqlConnection(SQLStringClass.masterConString);
    masterOpenCON.Open();
    return masterOpenCON;
}