0

SQLサーバーのデフォルトパスが実行されているSQLサーバーから取得する必要があります。私は次のようなことがうまくいくはずだと知っています:

declare @dir nvarchar(4000) 
exec master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\Setup',
N'SQLPath', 
@dir output
select @dir

ここで私の懸念は、.NETからこのストアドプロシージャを呼び出すために名前が使用するパラメータについてです。

Using sqlConn As New SqlConnection(connectionstring)
 Using cmd As New SqlCommand("xp_instance_regread", sqlConn)
            Parameter= New SqlParameter("@THE_FIRST_PARAMETER"...

どうすればそれを手に入れることができますか?sp_helpのようないくつかのストアドプロシージャがありますが、sqlparametersに関する詳細情報を提供していますか?ありがとうございました。

4

2 に答える 2

3

誰かがそれを必要とする場合に備えて、私は機能しているコードを追加します:)

Public Shared Function GetSqlPath(ByVal connectionstring As String) As String
    Dim rowCount = 0
    Using sqlConn As New SqlConnection(connectionstring)
        Using cmd As New SqlCommand("xp_instance_regread", sqlConn)
            cmd.CommandType = CommandType.StoredProcedure
            Dim parameterRootKey As New SqlParameter With {.SqlDbType = SqlDbType.NVarChar,
                                                           .ParameterName = "@rootkey",
                                                           .Size = 128,
                                                            .Direction = ParameterDirection.Input, .Value = "HKEY_LOCAL_MACHINE"
                                                          }

            Dim parameterKey As New SqlParameter With {.SqlDbType = SqlDbType.NVarChar,
                                                       .ParameterName = "@key",
                                                       .Size = 128,
                                                          .Direction = ParameterDirection.Input,
                                                        .Value = "SOFTWARE\Microsoft\MSSQLSERVER\Setup"
                                                        }

            Dim parameterValueName As New SqlParameter With {.SqlDbType = SqlDbType.NVarChar,
                                                             .ParameterName = "@value_name",
                                                             .Size = 128,
                                                          .Direction = ParameterDirection.Input, .Value = "SQLPath"
                                                        } '                                              
            Dim parameterValue As New SqlParameter With {.SqlDbType = SqlDbType.NVarChar,
                                                         .ParameterName = "@value",
                                                         .Size = 128,
                                                        .Direction = ParameterDirection.Output
                                                        }
            cmd.Parameters.Add(parameterRootKey)
            cmd.Parameters.Add(parameterKey)
            cmd.Parameters.Add(parameterValueName)
            cmd.Parameters.Add(parameterValue)
            sqlConn.Open()
            cmd.ExecuteNonQuery()

            Return CType(parameterValue.Value, String)
        End Using
    End Using
于 2013-02-20T00:58:42.480 に答える
1

オンラインに情報があり、xp_instance_regread文書化されていない場合でも、それを使用することにはリスクがあります。新しいサービスパックによって完全に変更される可能性があります。

「デフォルトパス」(何へのパス?)が何を意味するのかは完全には明確ではありませんが、SMOServerInformationクラスには、必要になる可能性のあるすべての「明白な」パスのプロパティがあります。RootDirectoryこの場合、あなたはプロパティについて質問していると思います。

于 2013-02-18T21:17:08.410 に答える