把一个现存的SQL Server数据库文件A.mdf复制为B.mdf。如果没有对B.mdf建立数据连接(dbconnection)及进行open操作,可以用System.IO.File.Delete将B.mdf删除。但是建立数据连接(dbconnection)及dbconnection.open后,即使关闭了数据连接(dbconnection.close)后,也无法将B.mdf删除。提示的错误为The process cannot access the file,because it is being used by anther process 如果正确地删除已打开的数据库文件?

解决方案 »

  1.   

    必须要关闭该数据库。
    可以使用drop database语句由数据库自动删除。
      

  2.   

    难道用dbconnection的close方法只是关闭了数据连接而没有关闭数据库?楼上说的drop database语句能否详细点?
      

  3.   

    必须要关闭该数据库。 
    可以使用drop database语句由数据库自动删除。
      

  4.   

    那如何彻底停止该资源的使用?dbconnection.Disposed()我试过也不行。
      

  5.   

    如果是文件方式访问数据库的话,这个文件是自动Attach到数据库进程的,你的进程关闭了连接,数据库进程并没有Dettach这个数据库,所以你删除不了。试试1楼的方法行不行。
      

  6.   

    那如何使数据库进程Dettach数据库。我不知道1楼的方法具体怎么实现,是用脚本的方法?
      

  7.   


     SqlConnection conn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=tempdb;Persist Security Info=True;User ID=sa;Password=sa");
                conn.Open();
                SqlCommand cmd = new SqlCommand("drop database N1", conn);
                cmd.ExecuteNonQuery();
    上面的代码删除了数据库N1,包括从物理上删除 mdf和ldf文件。
    注意上面的连接字符串不能指定为N1,如果是这样的话会由于数据库正在连接中将无法删除。
      

  8.   

    难道用dbconnection的close方法只是关闭了数据连接而没有关闭数据库?
    答:是的。数据库是并发的,可以同时支持多个数据库连接。
    楼上说的drop database语句能否详细点?
    答:drop database N1
      

  9.   

    我是按Windows Authentication连接SQL Server数据库的。
    连接字为"Data Source=.\\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True;AttachDbFilename=X:\\...\\B.mdf";
    和你给出的方式不太一样。那"drop database N1"中的N1应该写什么呢,就是数据库名吗B.mdf?
    "上面的连接字符串不能指定为N1"那我该写成什么呢?
      

  10.   

    我是按Windows Authentication连接SQL Server数据库的。
    连接字为"Data Source=.\\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;User Instance=True;AttachDbFilename=X:\\...\\B.mdf";
    和你给出的方式不太一样。那"drop database N1"中的N1应该写什么呢,就是数据库名吗B.mdf?
    "上面的连接字符串不能指定为N1"那我该写成什么呢?
      

  11.   

    我试了,可是执行cmd.ExecuteNonQuery()时,显示出错“Cannot drop the database 'B',becasuse it does not exist or you do not have permission”.
      

  12.   

    楼主用 SQL身份登录数据库 再结合8楼的方法应该可以了...
    drop database + 数据库名,你放在查询分析器中运行一下就明白了
    eg: drop database NorthWind