2013-02-18 112 views
0

我需要从SQL Server中检索SQL Server的默认路径正在运行。我知道像应工作:如何获取有关存储过程的信息xp_instance_regread

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的详细信息? 谢谢。

回答

1

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

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

+0

好你的权利,使用Server类和根财产我有SQL Server安装的路径,但如何获得报告服务的路径?在这个线程开始的某个时刻,我认为获得sql server路径安装我可以得到报告服务器路径....在开始的时候,我没有解释太多。但我需要的是获取报告服务的路径,以便复制一些程序集以本地化我的报告。 – Rolando 2013-02-19 15:12:02

+0

这是一个新问题,所以我建议你单独询问SSRS的标签。 – Pondlife 2013-02-19 15:18:23

+0

我会那么...... :) – Rolando 2013-02-19 15:21:47

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