我希望能够使用我找到的代码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 +。
**
答案 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\...