C#SQL还原数据库到默认数据位置

时间:2008-09-15 13:46:43

标签: c# sql

我正在编写一个C#应用程序,它通过FTP下载压缩数据库备份。然后,应用程序需要提取备份并将其还原到默认数据库位置。

我不知道将在运行应用程序的计算机上安装哪个版本的SQL Server。因此,我需要根据实例名称(在配置文件中)找到默认位置。

我发现的示例都有一个他们读过的注册表项,但这不起作用,因为这假设只安装了一个SQL实例。

我发现另一个例子创建了一个数据库,读取该数据库的文件属性,一旦完成就删除数据库。那太麻烦了。

我确实在.NET框架中找到了应该工作的东西,即:

Microsoft.SqlServer.Management.Smo.Server(ServerName).Settings.DefaultFile

问题是这是返回空字符串,这没有帮助。

我还需要找出运行SQL服务的NT帐户,这样我就可以在备份文件解压缩后为该用户授予读取权限。

3 个答案:

答案 0 :(得分:9)

我发现的是

Microsoft.SqlServer.Management.Smo.Server(ServerName).Settings.DefaultFile

仅在没有显式定义路径时才返回非null。只要指定的路径不是默认路径,则此函数会正确返回该路径。

因此,一个简单的解决方法是检查此函数是否返回一个字符串,或者为null。如果它返回一个字符串,那么使用它,但是如果它为null,则使用

Microsoft.SqlServer.Management.Smo.Server(ServerName).Information.RootDirectory + "\\DATA\\"

答案 1 :(得分:4)

一种方法是使用与master数据库相同的位置。您可以使用以下SQL查询SQL Server实例:

select filename from master.dbo.sysdatabases where name = 'master'

这将返回master数据库的完整路径。使用该路径,您可以使用FileInfo对象仅提取该路径的目录部分。这避免了检查注册表中您尝试连接的SQL Server实例的猜测工作。

答案 2 :(得分:1)

一个选项,可能是一个更简单的解决方案,是在目标服务器上创建一个新数据库,然后使用您的备份恢复该数据库。您的备份将在正确的位置,并且您在恢复备份文件时不必大惊小怪“移动”备份文件。 SQL期望将备份还原到与它们备份完全相同的物理路径。如果不是这种情况,则必须在RESTORE期间使用MOVE选项。 例如,如果您想在名称上添加日期,此解决方案还可以更轻松地在流程中重命名数据库。