如何获取有关存储过程xp_instance_regread的信息

时间:2013-02-18 20:12:38

标签: sql-server vb.net

我需要从sql server检索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的详细信息? 谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

即使在线有一些信息,xp_instance_regread也没有记录,这意味着使用它有风险:新的服务包可能会完全改变它。

“默认路径”(指向什么路径?)的含义并不完全清楚,但SMO ServerInformation类具有所有“明显”路径的属性需要。在这种情况下,我认为你问的是RootDirectory property