当前位置: 首页 > 编程语言 > C#

如何从C#恢复数据库Share

时间:2023-04-10 13:46:45 C#

如何从C#恢复数据库我有一个SQL2008数据库。我正在运行一个支持此数据库的表单,然后尝试更新它。这个想法是在更新失败时恢复该备份。这是我用来恢复备份的代码。publicvoidRestoreDatabase(StringdatabaseName,StringbackUpFile,StringserverName,StringuserName,Stringpassword){恢复sqlRestore=newRestore();BackupDeviceItemdeviceItem=newBackupDeviceItem(backUpFile,DeviceType.File);sqlRestore.Devices.Add(deviceItem);sqlRestore.Database=数据库名称;ServerConnectionconnection=newServerConnection(serverName,userName,password);服务器sqlServer=新服务器(连接);sqlRestore.Action=RestoreActionType.Database;字符串日志文件=System.IO.Path.GetDirectoryName(backUpFile);logFile=System.IO.Path.Combine(logFile,databaseName+"_Log.ldf");字符串数据文件=System.IO.Path.GetDirectoryName(backUpFile);dataFile=System.IO.Path.Combine(dataFile,databaseName+".mdf");数据库db=sqlServer.Databases[数据库名称];RelocateFilerf=newRelocateFile(databaseName,dataFile);sqlRestore.RelocateFiles.Add(newRelocateFile(databaseName,dataFile));sqlRestore.RelocateFiles.Add(newRelocateFile(databaseName+"_log",logFile));sqlRestore.SqlRestore(sqlServer);db=sqlServer.Databases[数据库名称];db.SetOnline();sqlServer.Refresh();问题似乎是我选择的文件名称与在线数据库不同我基本上想用备份替换服务器上的数据库。当我调用SqlRestore时出现异常。主要异常是{"Restoreofserver'localhost'failed."}深入研究内部异常会揭示这些错误执行Transact-SQL语句或批处理时发生异常。那么逻辑文件“DB”就不是数据库“DB”的一部分。使用RESTOREFILELISTONLY列出逻辑文件名。rnnRESTOREDATABASEexception已终止。我假设有一些方法可以告诉它只使用替换现有的数据库。我使用此代码获取数据库的文件路径以获取转储备份的目录。也许这可以用来重新创建文件名。publicstringGetDBFilePath(StringdatabaseName,StringuserName,Stringpassword,StringserverName){ServerConnectionconnection=newServerConnection(serverName,userName,password);服务器sqlServer=新服务器(连接);数据库db=sqlServer.Databases[数据库名称];返回sqlServer.Databases[数据库名称].PrimaryFilePath;}我修改了我的备份并还原函数看起来像这样:publicvoidBackupDatabase(SqlConnectionStringBuildercsb,stringdestinationPath){服务器sqlServer=新服务器(连接);备份bkpDatabase=newBackup();bkpDatabase.Action=BackupActionType.Database;bkpDatabase.Database=csb.InitialCatalog;BackupDeviceItembkpDevice=newBackupDeviceItem(destinationPath,DeviceType.File);bkpDatabase.Devices.Add(bkpDevice);bkpDatabase.SqlBackup(sqlServer);connection.Disconnect();}publicvoidRestoreDatabase(StringdatabaseName,StringbackUpFile,StringserverName,StringuserName,Stringpassword){ServerConnectionconnection=newServerConnection(serverName,userName,password);服务器sqlServer=新服务器(连接);恢复rstDatabase=newRestore();rstDatabase.Action=RestoreActionType.Database;rstDatabase.Database=数据库名称;BackupDeviceItembkpDevice=newBackupDeviceItem(backUpFile,DeviceType.File);rstDatabase.Devices.Add(bkpDevice);rstDatabase.ReplaceDatabase=true;rstDatabase.SqlRestore(sqlServer);任何文件不再需要重定位文件和指令。感谢莱姆斯的回答!我修改了sqlRestore.RelocateFiles.Add(newRelocateFile(databaseName,dataFileLocation));sqlRestore.RelocateFiles.Add(newRelocateFile(databaseName+"_log",logFileLocation));这两行到System.Data.DataTablelogicalRestoreFiles=sqlRestore.ReadFileList(sqlServer);sqlRestore.RelocateFiles.Add(newRelocateFile(logicalRestoreFiles.Rows[0][0].ToString(),dataFileLocation));sqlRestore.RelocateFiles.Add(newRelocateFile(logicalRestoreFiles.Rows[1][0].ToString(),logFileLocation));我的代码运行成功。感谢您的支持!您正在根据数据库名称添加RelocateFile选项,这是不正确的。您应该根据您重定位的每个文件的逻辑文件名添加它们。使用Restore.ReadFileList检索逻辑文件名列表。以上就是C#学习教程:如何从C#恢复数据库分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: