6

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

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

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

我发现的另一个示例创建了一个数据库,读取该数据库的文件属性,完成后删除该数据库。那只是麻烦。

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

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

问题是这会返回空字符串,这无济于事。

我还需要找出运行 SQL 服务的 NT 帐户,以便在提取备份文件后授予该用户对备份文件的读取权限。

4

3 回答 3

9

我发现的是

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

只有在没有明确定义路径时才返回非空值。只要您指定了一个非默认路径,此函数就会正确返回该路径。

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

Microsoft.SqlServer.Management.Smo.Server(ServerName).Information.RootDirectory + "\\DATA\\"
于 2008-09-23T08:02:50.667 回答
4

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

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

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

于 2008-09-15T14:15:16.387 回答
1

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

于 2008-09-15T14:07:29.557 回答