C# 数据库仍然为空

C# 数据库仍然为空,c#,sql-server,vb.net,database-restore,C#,Sql Server,Vb.net,Database Restore,步骤1:我使用此代码段备份数据库(工作正常) 步骤2:我从表中删除所有数据(因此数据库是空的) 步骤3:使用此代码段从备份文件还原数据库(它不会引发任何错误,执行良好) 但是它没有显示表中的数据…我的意思是在我恢复数据库后,我应该从备份文件中获取旧数据…但是数据库表仍然是空的 你能在这方面给我一些指导吗?我相信你的问题是,你试图在SQL语句中使用数据库路径,而不是数据库名称 假设您的连接字符串正在打开最初要还原到的数据库,还原方法可以重写如下: Private Sub Restore(ByVal

步骤1:我使用此代码段备份数据库(工作正常)

步骤2:我从表中删除所有数据(因此数据库是空的)

步骤3:使用此代码段从备份文件还原数据库(它不会引发任何错误,执行良好)

但是它没有显示表中的数据…我的意思是在我恢复数据库后,我应该从备份文件中获取旧数据…但是数据库表仍然是空的


你能在这方面给我一些指导吗?

我相信你的问题是,你试图在SQL语句中使用数据库路径,而不是数据库名称

假设您的连接字符串正在打开最初要还原到的数据库,还原方法可以重写如下:

Private Sub Restore(ByVal ConnectionString As String, ByVal DatabaseFullPath As String, ByVal backUpPath As String)
    Using con As New SqlConnection(ConnectionString)
        con.Open()

        Dim sDatabaseName As String

        sDatabaseName = con.Database

        Dim UseMaster As String = "USE master"
        Dim UseMasterCommand As New SqlCommand(UseMaster, con)
        UseMasterCommand.ExecuteNonQuery()

        Dim Alter1 As String = "ALTER DATABASE [" & sDatabaseName & "] SET Single_User WITH Rollback Immediate"
        Dim Alter1Cmd As New SqlCommand(Alter1, con)
        Alter1Cmd.ExecuteNonQuery()

        Dim Restore As String = "RESTORE DATABASE [" & sDatabaseName & "] FROM DISK = N'" & backUpPath & "' WITH  FILE = 1,  NOUNLOAD,  STATS = 10"
        Dim RestoreCmd As New SqlCommand(Restore, con)
        RestoreCmd.ExecuteNonQuery()

        Dim Alter2 As String = "ALTER DATABASE [" & sDatabaseName & "] SET Multi_User"
        Dim Alter2Cmd As New SqlCommand(Alter2, con)
        Alter2Cmd.ExecuteNonQuery()

        MsgBox("Successful")
    End Using
End Sub

你的假设是错误的;你说备份和还原都“工作正常”,但这显然不是真的。它不会引发任何错误…知道我哪里出了问题吗?完全不知道,因为你甚至从未测试过备份是否真的工作…@AndrewBarber备份工作正常…因为我在备份文件夹中得到了.bak文件。你不知道备份文件中有什么。它可能是空的。它可能是错误的数据库。它可能是腐败的。可能是错误的bak文件。。。
 Private Sub Restore(ByVal ConnectionString As String, ByVal DatabaseFullPath As String, ByVal backUpPath As String)
        Using con As New SqlConnection(ConnectionString)
            con.Open()

            Dim UseMaster As String = "USE master"
            Dim UseMasterCommand As New SqlCommand(UseMaster, con)
            UseMasterCommand.ExecuteNonQuery()

            Dim Alter1 As String = "ALTER DATABASE [" & DatabaseFullPath & "] SET Single_User WITH Rollback Immediate"
            Dim Alter1Cmd As New SqlCommand(Alter1, con)
            Alter1Cmd.ExecuteNonQuery()

            Dim Restore As String = "RESTORE DATABASE [" & DatabaseFullPath & "] FROM DISK = N'" & backUpPath & "' WITH  FILE = 1,  NOUNLOAD,  STATS = 10"
            Dim RestoreCmd As New SqlCommand(Restore, con)
            RestoreCmd.ExecuteNonQuery()

            Dim Alter2 As String = "ALTER DATABASE [" & DatabaseFullPath & "] SET Multi_User"
            Dim Alter2Cmd As New SqlCommand(Alter2, con)
            Alter2Cmd.ExecuteNonQuery()

            MsgBox("Successful")
        End Using
    End Sub
Private Sub Restore(ByVal ConnectionString As String, ByVal DatabaseFullPath As String, ByVal backUpPath As String)
    Using con As New SqlConnection(ConnectionString)
        con.Open()

        Dim sDatabaseName As String

        sDatabaseName = con.Database

        Dim UseMaster As String = "USE master"
        Dim UseMasterCommand As New SqlCommand(UseMaster, con)
        UseMasterCommand.ExecuteNonQuery()

        Dim Alter1 As String = "ALTER DATABASE [" & sDatabaseName & "] SET Single_User WITH Rollback Immediate"
        Dim Alter1Cmd As New SqlCommand(Alter1, con)
        Alter1Cmd.ExecuteNonQuery()

        Dim Restore As String = "RESTORE DATABASE [" & sDatabaseName & "] FROM DISK = N'" & backUpPath & "' WITH  FILE = 1,  NOUNLOAD,  STATS = 10"
        Dim RestoreCmd As New SqlCommand(Restore, con)
        RestoreCmd.ExecuteNonQuery()

        Dim Alter2 As String = "ALTER DATABASE [" & sDatabaseName & "] SET Multi_User"
        Dim Alter2Cmd As New SqlCommand(Alter2, con)
        Alter2Cmd.ExecuteNonQuery()

        MsgBox("Successful")
    End Using
End Sub