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

时间:2011-06-19 17:02:54

标签: c# mysql

所以我要做的是打开一个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();
}

3 个答案:

答案 0 :(得分:9)

不要为此烦恼。 MySQL ADO.NET连接器uses a pool of connections意味着当您在连接上调用.Open时实际上没有打开它,您将从现有连接池中提取它,当您调用.Close时没有关闭它,你将它返回到连接池,以便它可以重复使用。

默认情况下启用IIRC连接池,但您可以使用连接字符串上的以下参数对其进行控制:

  • Pooling = true
  • 最大泳池尺寸= 100
  • Min Pool Size = 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())
        {
            ...
        }
    }
}

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

答案 1 :(得分:4)

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

例如:

public static MySqlConnection Connection { get; private set; }

Connection = OpenCon();

答案 2 :(得分:0)

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

private static MySqlConnection masterOpenCON;

static void Main(string[] args)
{
    OpenCon();
}

public static MySqlConnection OpenCon()
{
    masterOpenCON = new MySqlConnection(SQLStringClass.masterConString);
    masterOpenCON.Open();
    return masterOpenCON;
}