5

我希望能够使用我在这里找到的代码在我的 C# WinForm 应用程序中创建一个数据库。

但我需要找到一种方法来获取该特定 SQL Server 实例的默认数据目录。我想知道是否有一种简单的方法可以在各种版本的 SQL Server 上使用。

提前致谢。


编辑

我发现以下 Select 将返回远程服务器上的默认数据目录:

SELECT 
    SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
FROM master.sys.master_files 
WHERE database_id = 1 
    AND file_id = 1

此解决方案仅适用于 SQL Server 2005+。

**

4

4 回答 4

0

是 Alex Aza 提出的更好的解决方案。
解决方案是:

using (var connection = new SqlConnection("Data Source=.;Integrated Security=SSPI"))
{
    var serverConnection = new ServerConnection(connection);
    var server = new Server(serverConnection);
    var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile;
    var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog;
}

它需要引用 Microsoft.SqlServer.Smo.dll 和 Microsoft.SqlServer.ConnectionInfo.dll。可以在文件夹 C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies 中找到这些 dll。它们随 SQL 安装一起分发。

于 2014-04-16T08:59:07.700 回答
0

这适用于 SQL 2000+

SELECT SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1)
FROM master.dbo.sysdatabases
WHERE name = 'master'
于 2012-08-09T12:59:51.593 回答
0

也许这会帮助你:

DECLARE @regvalue varchar(100)

EXEC master.dbo.xp_regread @rootkey='HKEY_LOCAL_MACHINE',
        @key='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLServer\Setup',
        @value_name='SQLDataRoot',
        @value=@regvalue OUTPUT,
        @output = 'no_output'

SELECT @regvalue as DataAndLogFilePath

此存储过程需要一个参数,其中声明 SQL 版本,即。...\MSSQL.11.MSSQLSERVER\...

于 2014-04-16T09:14:07.063 回答
0

您可以在服务器属性 - 数据库设置 - 数据库默认位置找到它。如果需要,您可以使用 SQL Server Profiler 找出 sql 查询(这取决于服务器版本)。

于 2012-08-09T13:14:23.807 回答