我在谷歌搜索后使用引用编写了这段代码,但是在执行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
修改-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}
答案 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