创建数据库 - 如何找到默认数据目录?

时间:2012-07-23 22:42:06

标签: c# sql-server create-table

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

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

提前致谢。


修改

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

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 个答案:

答案 0 :(得分:0)

这适用于SQL 2000 +

SELECT SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1)
FROM master.dbo.sysdatabases
WHERE name = 'master'

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Here是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安装一起分发。

答案 3 :(得分: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\...