为什么代码不能进入IF块?

时间:2012-01-15 16:35:31

标签: vb.net sql-server-2008

我正在使用给定的代码来复制我的数据库文件......它在调试模式下就像一个魅力,但是一旦我创建了一个设置,它就会停止工作。错误是

  

“数据库分离失败”

我尝试逐行检查代码,发现代码没有进入IF块。

我不知道为什么。

Public Sub bk()
  Try
    Dim strDatabasePath As String = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "LIC.mdf")
    Dim strdbLogPath As String = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "LIC_log.ldf")

    ''# Dim strDatabasePath As String = My.Computer.FileSystem.CombinePath(Application.UserAppDataPath, "LIC.mdf")
    ''# Dim strdbLogPath As String = My.Computer.FileSystem.CombinePath(Application.UserAppDataPath, "LIC_log.ldf")

    MsgBox(Application.UserAppDataPath)
    ''# DB.Connection can be any valid SQLConnection which you might already be using in your application
    Dim con As New SqlClient.SqlConnection(LIC.My.Settings.LICConnectionString)
    Dim srvCon As New ServerConnection(con)
    Dim srv As Server = New Server(srvCon)
    MsgBox(srv.ToString)
    If srv.Databases.Contains(strDatabasePath) Then
      MsgBox("In If")
      If con.State = ConnectionState.Open Then
        MsgBox(con.State)
        con.Close()
      End If
      MsgBox(con.State & " Is It True?")
      srv.KillAllProcesses(My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "LIC.mdf"))
      srv.DetachDatabase(strDatabasePath, True)
      My.Computer.FileSystem.CopyFile(strDatabasePath, "c:\backup\LIC.mdf", True)    
      My.Computer.FileSystem.CopyFile(strdbLogPath, "c:\backup\LIC_log.ldf", True)    
      MessageBox.Show("Backup taken successfully")
    End If    
    srvCon.Disconnect()
    con.Open()
  Catch ex As Exception
    MessageBox.Show("Error Occured : " & ex.Message)    
  End Try
End Sub

2 个答案:

答案 0 :(得分:2)

我认为您的代码的主要问题是您正在混合概念。

数据库的名称与SQL Server用于存储数据库内容的文件的路径完全不同。

当您对Databases collectionServer执行操作时,ContainsDetachDatabase等操作需要数据库的名称,而不是数据库的路径。文件。

您可以从SqlClient连接(在Database属性中)获取数据库的名称,并且可以使用MasterDBPath和{{1从服务器对象获取数据库文件的名称属性。

这使您的代码更加清晰,并且不依赖于存储在特定位置的文件。

MasterDBLogPath

答案 1 :(得分:0)

您是否检查过数据库是否在此路径上?

My.Application.Info.DirectoryPath

正如您想象的那样,只有 srv.Databases 具有您正在寻找的路径时,您的代码才会输入该IF。

尝试打印srv.Databases列表以检查其内容是什么。