Sql server 为什么sqlConnection.Close()不关闭登录?
我们有单元测试来测试我们的数据库安装和卸载功能是否成功工作。 单元测试使用SqlClient.SqlConnection类在之前、期间和之后检查数据库内容 我们的问题是,在使用SqlClient.SqlConnection之后,卸载的drop login部分失败,因为它声称用户当前已登录。尽管我们调用了SqlConnection.Close(),但登录名似乎仍然处于打开状态 我们的代码看起来有点像这样:Sql server 为什么sqlConnection.Close()不关闭登录?,sql-server,database-connection,smo,Sql Server,Database Connection,Smo,我们有单元测试来测试我们的数据库安装和卸载功能是否成功工作。 单元测试使用SqlClient.SqlConnection类在之前、期间和之后检查数据库内容 我们的问题是,在使用SqlClient.SqlConnection之后,卸载的drop login部分失败,因为它声称用户当前已登录。尽管我们调用了SqlConnection.Close(),但登录名似乎仍然处于打开状态 我们的代码看起来有点像这样: InstallTables(); // function uses smo to crea
InstallTables(); // function uses smo to create tables in a database.
string connString = CreateLogin("userName", "password"); // create login with smo
// Test the returned connection string connects to the database
using (SqlConnection con = new SqlConnection(connString))
{
con.Open();
//test code to read the DB version out of a table
//Dispose calls con.Close() - I have also tried calling it explicitly
}
DropTables(); // uses smo to drop tables from the database
DropLogin("userName", "password"); // uses smo to drop the login
DropLogin失败,出现以下异常:
System.Data.SqlClient.SqlException:无法删除登录名“engageSecurity\u unittest\u 129418264074692569”,因为用户当前已登录
如果我删除所有SqlConnection代码,直到完成DropLogin之后,那么一切都会正常运行
有人知道我调用SqlConnection.Close()时用户为什么没有注销吗
这与连接池有关吗?除非您在连接字符串中显式禁用连接池,否则我猜即使您正在处理连接,它在连接池中仍然是活动的(如果您决定重新使用它):
尝试禁用连接池(通过在连接字符串中添加
Pooling=false;
),看看会发生什么。连接池=false的替代方法是和。谢谢Justin-连接字符串中的Pooling=false成功了!考虑使用<代码> SqLo连接。CultCurbs/Cord>,而不是彻底禁用连接池。看看,也看看。