2013-02-18 63 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 
相關問題