Fork me on GitHub

SqlServer关于“无法删除数据库 "XXXX",因为该数据库当前正在使用”问题的解决方案

引言

在项目中,通过使用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语句直接用空格或者“;”分开。

总结

在数据库操作过程中,我们会遇到千奇百怪的错误,不断的学习和总结才是我们步入下个阶段的必经之路!如果该文对您有所帮助,请点个关注支持下!

 

posted @ 2019-09-02 12:56  码探长  阅读(5142)  评论(0编辑  收藏  举报