5

HEREで見つけたコードを使用して、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

サーバーのプロパティ - データベース設定 - データベースのデフォルトの場所で見つけることができます。必要に応じて、SQL Server Profiler を使用して SQL クエリを見つけることができます (サーバーのバージョンによって異なります)。

于 2012-08-09T13:14:23.807 に答える
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 バージョンが示されているパラメータが 1 つ必要です。...\MSSQL.11.MSSQLSERVER\...

于 2014-04-16T09:14:07.063 に答える
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 を参照する必要があります。これらの dll は、フォルダー C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies にあります。これらは、SQL インストールと共に配布されます。

于 2014-04-16T08:59:07.700 に答える
0

This works with 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 に答える