程序是连接到本地的一个mdf数据库文件进行操作的,我希望通过复制该mdf文件来备份数据库~
使用file.copy时提示该数据库文件被其他进程使用,如何解决?
我的数据库连接已经关闭的了。网上说要关闭数据库服务,但我不知道怎么关闭,大家帮忙教下吧

解决方案 »

  1.   

    这个要关闭sqlserver进程 SQL Server (MSSQLSERVER)把它kill掉
      

  2.   

    这个kill怎么使用?要引用什么命名空间?比如说我在任务管理器里面看到进程为SqlServer.exe
      

  3.   

    要不你先将那个库分离出去,复制完了再附加回来。
    为什么不用backup语句来备份数据库呢。
      

  4.   

    这个复制文件的是用户提出的,用backup是否源文件受损了就难恢复了。分离没用过复杂不?
      

  5.   

    通过枚举获取sqlserver的服务,停止后,再拷贝!
    参考资料:
    Using the ServiceController in C# to stop and start a service
    1、添加对System.ServiceProcess 的引用2、用服务名查找服务:ServiceController myService = new ServiceController();
    myService.ServiceName = "sqlServer";
    string svcStatus = myService.Status.ToString();
    if (svcStatus == "Running")
    {
       myService.Stop(); 
    }
      

  6.   

    studio management里面停服务就行,当然windows下挺进程也可以。
      

  7.   


    我在任务管理器看到的进程是sqlservr.exe,我把它关掉就可以复制了。
    可我在程序中运行 string svcstatus = myService.Status.ToString();的时候出现无法打开计算机“.”上的sqlservr服务。为什么?
    我用的是XP,VS2005
      

  8.   

    备份数据库
    ServiceController sc = new ServiceController("SQL Server (SQLEXPRESS)"); 
      if (sc.Status.Equals(ServiceControllerStatus.Running))  
      {  
      sc.Stop();  
      }  
      } 
      

  9.   

    using System.Diagnostics;foreach(Process proc in Process.GetProcessesByName("your process name"))
    {
       if(!proc.CloseMainWindow)
       {
            proc.Kill();
       }
    }
      

  10.   


    我任务管理器的sqlservr.exe有两个,一个是属于登陆用户的,一个属于NETWORK的,经测试你这样只把NETWORK那个关掉,属于登陆用户的还在,错误依旧。占有的进程是用户那一个,如果把network的那个也关闭,后面就不能继续对数据库操作了。
      

  11.   


    你以为用copy那么“源文件受损了”就能恢复?备份为了什么?
      

  12.   


    copy后就有好多个源文件。我菜鸟,先不管这个。能帮忙解决上面问题吗?
      

  13.   

    我在任务管理器里有两个同名进程叫sqlservr.exe,一个属于Administrator一个属于NETWORK SERVICE
    我怎么才可以找到属于Administrator的那个并把它关掉?
    Process.StartInfo.UserName属性都是“”空的。
      

  14.   

    http://www.codeproject.com/KB/shell/ManageProcessShellAPI.aspx
    看看上面那篇文章,里面实现了一个类,可以获取很多信息:
      

  15.   


    StartInfo里面的username是“”空的,文章下面FAQ中Smith也提到
      

  16.   

    我现在可以把我想要的进程kill掉了,可还是复制不了?
    kill()跟我们平时在任务管理器结束进程有什么区别?
      

  17.   


    对了 这样就可以了
    net stop mssqlser
    调用NET里 处理CMD命令行的 类停止服务后,拷贝完成后 在 启动 net start mssqlser