我正在使用ADO.NET创建数据库。基本上,我正在以下一种方式执行SQL命令:
private bool ExecuteSqlCommand(string command)
{
var success = true;
using (var connection = GetSqlConnection())
{
if (connection == null)
return false;
using (var myCommand = new SqlCommand("query", connection))
{
try
{
connection.Open();
myCommand.CommandText = command;
myCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
success = false;
Log.LogMessage(string.Format("Unable to execute SQL command: {0}", ex.Message));
}
}
}
return success;
}
GetSqlConnection只是通过连接字符串获得一些正确的SqlConnection,如
"Server={0}\\{1};User Id={2};Password={3};Application Name={4};"
运行良好,并正确执行命令,但有一个例外 - 根据Sql Manager Studio活动监视器,即使执行了方法,它仍然是活动连接。
根据问题Why does my SqlConnection remain in the SSMS Processes list after closing it?,这是正确的行为,因为连接可能会被重用。但是严重问题是,稍后,将使用不同的SqlConnection为此数据库调用READ_COMMITTED_SNAPSHOT
命令。这导致异常,因为READ_COMMITTED_SNAPSHOT
要求,用于调用此命令的连接应该是与数据库的唯一连接。
我无法重复使用此连接进行数据库的进一步操作,因为我为它们使用不同的连接字符串,数据库指定为InitialCatalog(显然,我不能使用它,而数据库不存在)。
那么,我可以以某种方式删除这个初始连接吗?