引言
在项目中,通过使用SQL语句“DROP DATABASE [数据库名]”删除数据时,一直出现“无法删除数据库 "XXXX",因为该数据库当前正在使用”的错误信息,经测试在SqlSever数据库客户端中,直接执行该Sql语句可以正常执行,但是通过OLEDB执行该Sql语句,就出现上述错误,笔者查阅相关文档,找到了解决该问题的方法。
解决方法
将要删除的数据库设置库单用户模式和设置立即回滚,具体SQL语句如下:
USE [master] ALTER DATABASE [数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [数据库名]
封装删除数据库如下:
public static bool DeleteSqlServerDB(string serverCon, string dbName)
{
bool bSuccess = false;
try
{
using (SqlConnection conMaster = new SqlConnection(serverCon))
{
conMaster.Open();
string strExist = @"select * from dbo.sysdatabases where name='" + dbName + @"'";
SqlCommand cmdExist = new SqlCommand(strExist, conMaster);
SqlDataReader readerExist = cmdExist.ExecuteReader();
bool bExist = readerExist.HasRows;
readerExist.Close();
if (bExist)
{
var cmd = new SqlCommand(
$" USE [master] ALTER DATABASE [{dbName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [{dbName}]",
conMaster);
cmd.ExecuteNonQuery();
}
conMaster.Close();
}
bSuccess = true;
}
catch (Exception e)
{
bSuccess = false;
}
return bSuccess;
}
注:SqlCommand可以一次执行多条sql语句,每条sql语句直接用空格或者“;”分开。
总结
在数据库操作过程中,我们会遇到千奇百怪的错误,不断的学习和总结才是我们步入下个阶段的必经之路!如果该文对您有所帮助,请点个关注支持下!
|