"选择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对象,是因为相同的连接字符串?
答案 0 :(得分:2)
正如mys {{{}}上的mysqlconnector.Net文档所述(突出显示是我的):
MySQL Connector / Net支持更好的连接池 数据库密集型应用程序的性能和可伸缩性。 :此 默认情况下已启用。您可以将其关闭或调整其性能 使用连接字符串选项池的特性, 连接重置,连接生命周期,缓存服务器属性,最大值 泳池大小和最小泳池大小。请参见第5.1.1节“创建a 连接器/网络连接字符串“了解更多信息。
通过保持本机连接,连接池工作 当客户端处理MySqlConnection时,服务器正常运行。 随后,如果打开一个新的MySqlConnection对象,它将是 从连接池创建,而不是创建新的本机 连接。这样可以提高性能。
由于默认情况下打开连接池,因此当您关闭并处理第一个mysqlconnection对象并且下一部分代码重用时,数据库连接未关闭。
您可以使用sql中的connection pooling函数完全验证这一点。