我正在MySql中创建一个临时表,并希望在我断开连接后它不在那里。我已经删除了代码中的所有内容,只留下了这个:
//create the first connection
var connection = new MySqlConnection(ConnectionString);
connection.Open();
//create a temp table
var cmd = connection.CreateCommand();
cmd.CommandText = "CREATE TEMPORARY TABLE SomeDummyTable(Column1 float)";
cmd.ExecuteNonQuery();
//read the new temp table to proove it's created
cmd = connection.CreateCommand();
cmd.CommandText = "select * from SomeDummyTable";
cmd.ExecuteNonQuery();
//close and dispose of the first connection
connection.Close();
connection.Dispose();
//create new connection
MySqlConnection connection2 = new MySqlConnection(ConnectionString);
connection2.Open();
var cmd2 = connection2.CreateCommand();
cmd2.CommandText = "select * from SomeDummyTable";
//this does not throw an exception, even though SomeTable is
//a temp table from the previous connection
cmd2.ExecuteNonQuery();
所以我使用一个连接创建临时表,然后关闭该连接并打开另一个连接。我可以使用第二个连接看到临时表。是什么赋予了?我错过了什么?
此外:如果我关闭应用程序并重新打开它,临时表就不存在了。可能是某些连接池还是什么?
答案 0 :(得分:3)
这似乎是MySQL连接池的错误,或者您正在使用的特定提供商。根据我在粗略搜索中找到的内容,临时表应该在创建它们的连接关闭时自动删除。我不期望连接池改变这种行为。
然后想到两个解决方法:
Pooling=False;
添加到连接字符串来禁用连接池。This MySQL bug report似乎是恰当的。显然,其他连接属性未被重置。也许临时表没有被立即删除(或者后续连接无法访问)是同一问题的一部分。
You should report the bug.我在bug中搜索了“临时表连接池”,但没有找到任何明确涵盖你的场景的内容。