サーバーxxxx/SQLExpressの復元に失敗しました

私はこのコードを使用してSQL Serverデータベースを復元しています

Server databaseServer = new Server(new ServerConnection(CvVariables.SQL_SERVER_NAME));
string databasePath = System.IO.Path.Combine(Environment.CurrentDirectory,);
string databasePath = @"D:cvdb.bak";

Restore databaseRestore = new Restore();
databaseRestore.Action = RestoreActionType.Database;
databaseRestore.Database = CvVariables.Catalog;
databaseRestore.Devices.Add(new BackupDeviceItem(databasePath, DeviceType.File));
databaseRestore.ReplaceDatabase = true;
databaseRestore.SqlRestore(databaseServer);

私はSQL Serverコードネーム「Denali」Express Core(CTP 3)を使用しています。

このコードは開発者のPC上で正常に動作しますが、クライアントのPC上ではこの例外がスローされます。

サーバーxxxx/SQLExpressの復元に失敗しました

私はどこが間違っているのか分かりません。

InnerException Is:

Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: Directory lookup for the file "C:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATACafeteria_Vernier_db.mdf" failed with the operating system error 3(The system cannot find the path specified.). 
File 'Cafeteria_Vernier_db' cannot be restored to 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATACafeteria_Vernier_db.mdf'. Use WITH MOVE to identify a valid location for the file. 
Directory lookup for the file "C:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATACafeteria_Vernier_db_log.ldf" failed with the operating system error 3(The system cannot find the path specified.). 
File 'Cafeteria_Vernier_db_log' cannot be restored to 'C:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATACafeteria_Vernier_db_log.ldf'. Use WITH MOVE to identify a valid location for the file. 
Problems were identified while planning for the RESTORE statement. Previous messages provide details. 
RESTORE DATABASE is terminating abnormally. 
   at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) 
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) 
   --- End of inner exception stack trace --- 
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType) 
   at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands, ExecutionTypes executionType) 
   at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollection queries) 
   at Microsoft.SqlServer.Management.Smo.BackupRestoreBase.ExecuteSql(Server server, StringCollection queries) 
   at Microsoft.SqlServer.Management.Smo.Restore.SqlRestore(Server srv)
ベストアンサー

ターゲットマシン上のパスが元のバックアップマシン上の対応するパスと異なっているようです。

提案: 私は.Net APIのことを忘れて、T-SQLに直接落とした(もちろんC#からやることができる)。

新しいT-SQLスクリプトは次のようになります。

-- REFERENCE: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=147723
RESTORE DATABASE paintcheck
FROM DISK = 'C:paintcheck.BAK'
WITH REPLACE, MOVE 'paintcheck' TO 'C:MSSQLDATApaintcheck_Data.MDF',
MOVE 'paintcheck_log' TO 'C:MSSQLDATApaintcheck_Log.LDF'

ここにいくつかの例があります:

http://geekswithblogs.net/AskPaula/archive/2011/07/11
/146167.aspx

http://msdn.microsoft.com/en-us/library/ms186858.aspx

‘希望は助けて

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です