所以我要做的是打开一个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();
}
答案 0 :(得分:9)
不要为此烦恼。 MySQL ADO.NET连接器uses a pool of connections意味着当您在连接上调用.Open
时实际上没有打开它,您将从现有连接池中提取它,当您调用.Close
时没有关闭它,你将它返回到连接池,以便它可以重复使用。
默认情况下启用IIRC连接池,但您可以使用连接字符串上的以下参数对其进行控制:
因此,当您想要发送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;
}