【发布时间】:2019-12-31 12:42:09
【问题描述】:
这是我正在处理的代码示例,主要问题是在使用 SQL Server 客户端 10.0.0.0 的 PC 上运行时,我无法运行还原操作。进程在这一行崩溃:
DataTable logicalRestoreFiles = res.ReadFileList(myServer);
抛出的异常是:
找不到方法 Microsoft.SqlServer.Managment.Common.ServerConnection.GetDatabaseConnection(System.String)
仅当我尝试在装有 SQL Server 2008 R2 的 PC 上运行此代码时才会出现此问题。我在 SQL Server 2017 上尝试过,数据库恢复没有问题。我真的需要一些帮助,我没有想法。
以下是当前的 Connection 包及其版本,以防万一:
<package id="Microsoft.Data.ConnectionUI" version="16.4.29519.181" targetFramework="net461" />
<package id="Microsoft.Data.Tools.Sql.BatchParser" version="150.18097.0-xplat"
targetFramework="net461" />
<package id="Microsoft.SqlServer.ConnectionInfo" version="150.18097.0-xplat"
targetFramework="net461" />
<package id="Microsoft.SqlServer.ConnectionInfo.dll" version="1.0.1" targetFramework="net461" />
<package id="Microsoft.SqlServer.Management.Sdk.Sfc.dll" version="1.0.1" targetFramework="net461"
/>
<package id="Microsoft.SqlServer.Smo.dll" version="1.0.1" targetFramework="net461" />
<package id="Microsoft.SqlServer.SmoExtended.dll" version="1.0.1" targetFramework="net461" />
<package id="Microsoft.SqlServer.SqlEnum.dll" version="1.0.1" targetFramework="net461" />
<package id="System.Data.SqlClient" version="4.4.0" targetFramework="net461" />
public void RestoreDatabase(string DBName)
{
ServerConnection connection = new ServerConnection(txtServidor.Text, txtUsuario.Text, txtContraseña.Text);
Server myServer = new Server(connection);
Restore res = new Restore();
res.Database = DBName;
res.Action = RestoreActionType.Database;
res.Devices.AddDevice(ConfigurationManager.AppSettings.Get("bakPathToFile"), DeviceType.File);
res.PercentCompleteNotification = 10;
res.ReplaceDatabase = true;
res.PercentComplete += new PercentCompleteEventHandler(res_PercentComplete);
try
{
bool logicalNamesRetrieved = false;
string mdfFile = "";
string logFile = "";
var Response = EnviarComando("SELECT top 1 physical_name FROM sys.database_files");
if (Response.Success)
{
mdfFile = CommandContent.Replace("master.mdf",_databasename+".mdf");
logFile = CommandContent.Replace("master.mdf", _databasename + "_Log.ldf");
}
if(String.IsNullOrEmpty(mdfFile) || String.IsNullOrEmpty(logFile))
{
Logger.WriteLog("Ocurrio un error al buscar la ruta del archivo mdf o ldf.","Error");
}
else
{
try
{
DataTable logicalRestoreFiles = res.ReadFileList(myServer);
res.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[0][0].ToString(), mdfFile));
res.RelocateFiles.Add(new RelocateFile(logicalRestoreFiles.Rows[1][0].ToString(), logFile));
logicalNamesRetrieved = true;
}
catch (Exception ex)
{
Logger.WriteLog("Excepcion al buscar logical names de los archivos mdf y log "+ex.Message + ex.InnerException != null ?
ex.InnerException.Message : "", "Error rutas");
}
}
if(logicalNamesRetrieved)
res.SqlRestore(myServer);
}
catch (Exception ex)
{
Logger.WriteLog("Ocurrio un error al intentar restaurar la base de datos. " + ErrorMesage + ex.InnerException != null ?
ex.InnerException.Message : "", "Error");
}
}
【问题讨论】:
-
什么是还原类?你自己的类或一些包
-
@Gauravsa:很可能是 SMO(SQL Server 管理对象)库中的类
标签: c# sql-server database restore .net-4.6.1