2013-05-01 1 views
1

Я написал этот код, используя ссылки после биткинга, но при выполнении BackupDatabase(myfilename.bak) он дает мне ошибку в строке №. 11 и говорит:ServerConnection | Восстановление резервной копии с помощью Microsoft.SqlServer.SmoEnum Error - FileNotFoundException

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.

EDIT-1:

При отладке я нашел это с con

enter image description here

EDIT-2:

У меня есть еще один запрос на этот вопрос: Есть ли connectionString DB - это то же самое из строки подключения 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

вы добавили ссылку на DLL в проекте? – Ric

ответ

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

Смежные вопросы