这怎么可以是相同的SQL连接?

时间:2018-06-19 08:28:25

标签: c# database-connection mariadb mysql-connector

"选择LAST_INSERT_ID()"与连接有关。所以我在Mariadb 5.5.25中测试,代码如下:

string strConn = "server=localhost;userid=root;password=admin;database=changde2018;charset=utf8;Allow Zero Datetime=True";
using (MySqlConnection connection = new MySqlConnection(strConn))
{
   connection.Open();
   MySqlCommand cmd = MySqlCommand("insert into t_data (gid) values(665)", connection);// gid is a autoincrease value
   cmd.ExecuteNonQuery();
   connection.Close();
}

using (MySqlConnection connection = new MySqlConnection(strConn))
{
   DataTable dt2 = new DataTable();
   MySqlDataAdapter da = new MySqlDataAdapter("select LAST_INSERT_ID()", connection);
   da.Fill(dt2);
   Console.WriteLine(dt2.Rows[0][0].ToString());//expect 0, but it's as same as the last inserted value
}

我在navicat中查询显示状态,例如'主题%''。在上面的exe代码之后,' threads_connected'只增加一个。这证明Mariadb确实将它们视为相同的联系。这可能就是为什么,我使用两个不同的MySqlConnection对象,是因为相同的连接字符串?

1 个答案:

答案 0 :(得分:2)

正如mys {{{}}上的mysqlconnector.Net文档所述(突出显示是我的):

  

MySQL Connector / Net支持更好的连接池   数据库密集型应用程序的性能和可伸缩性。 :此   默认情况下已启用。您可以将其关闭或调整其性能   使用连接字符串选项池的特性,   连接重置,连接生命周期,缓存服务器属性,最大值   泳池大小和最小泳池大小。请参见第5.1.1节“创建a   连接器/网络连接字符串“了解更多信息。

     

通过保持本机连接,连接池工作   当客户端处理MySqlConnection时,服务器正常运行。   随后,如果打开一个新的MySqlConnection对象,它将是   从连接池创建,而不是创建新的本机   连接。这样可以提高性能。

由于默认情况下打开连接池,因此当您关闭并处理第一个mysqlconnection对象并且下一部分代码重用时,数据库连接未关闭。

您可以使用sql中的connection pooling函数完全验证这一点。