ServerConnection |使用Microsoft.SqlServer.SmoEnum进行备份还原错误 - FileNotFoundException

时间:2013-05-01 07:54:17

标签: c# sql-server vb.net smo database-backups

我在谷歌搜索后使用引用编写了这段代码,但是在执行BackupDatabase(myfilename.bak)时,它在行号中给出了错误。 11并说:

FileNotFoundException未处理

Could not load file or assembly 'Microsoft.SqlServer.SmoEnum, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.

我已检查过驱动器和SMO中是否存在bin文件。我无法理解这个问题。请帮助。

public readonly string ConnectionString = MyApp.Properties.Settings.Default.DbConnectionString;
public void BackupDatabase(string backUpFile)
    {
        ServerConnection con = new ServerConnection(ConnectionString);
        Server server = new Server(con);
        Backup source = new Backup();
        source.Action = BackupActionType.Database;
        source.Database = "TestDB";
        BackupDeviceItem destination = new BackupDeviceItem(backUpFile, DeviceType.File);
        source.Devices.Add(destination);
        source.SqlBackup(server);
        con.Disconnect();
    }

另外,我试图这样做:

if(con.Isopen)
{
    //Then all of my code goes in here
}

但是这种情况永远不会满足,内部代码永远不会被执行。

我还观察到,就像我们对con.open()使用Database Connection一样,我们对ServerConnection没有这样的选择。

修改-1:

调试时我发现了con

enter image description here

修改-2:

我对此问题有另一个疑问:DB的connectionString是否与ServerConnection的连接字符串相同???

我实际上在谈论这一行: -

public readonly string ConnectionString = MyApp.Properties.Settings.Default.DbConnectionString;

因为上述ConnectionString包含{server='Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDb.mdf;Integrated Security=True;User Instance=True';Trusted_Connection=true;multipleactiveresultsets=false}

1 个答案:

答案 0 :(得分:0)

要创建Smo连接,您只需要一个ServerConnection,并创建一个ServerConnection,您只需要SQL Server的名称。 实施例

ServerConnection serverConnection = new ServerConnection("mySQLServer")
Smo.Server smoServer = new Smo.Server(serverConnection)

我可以看到你正在使用SQLExpress。然后将调用您的SQL Server实例"。\ SQLEXPRESS"默认情况下,您必须执行以下操作:

ServerConnection serverConnection = new ServerConnection(".\\SQLEXPRESS")
Smo.Server smoServer = new Smo.Server(serverConnection)

请注意' \'防止在字符串内逃逸。

如果有帮助,请查看我的工作示例: https://stackoverflow.com/a/23096791/2948212