2014-02-15 91 views
1

有人知道如何從SQL連接字符串中提取機器名稱嗎? 例如,對於下面的連接字符串,當機器「ighost」,其IP地址爲190.190.200.100上運行的應用程序/腳本:從連接字符串中提取機器名稱

"Server=ighost;Database=myDataBase;User Id=myUsername;Password=myPassword;" 
"Server=(local);Database=myDataBase;User Id=myUsername;Password=myPassword;" 
"Server=.\SqlExpress;Database=myDataBase;User Id=myUsername;Password=myPassword;" 
"Server=190.190.200.100,1433;Database=myDataBase;User Id=myUsername;Password=myPassword;" 

我希望得到的結果,只是機器名稱:

ighost 

這難道不是一個問題,因爲上面我不問如何解析連接字符串,而是如何找到即使連接字符串服務器屬性中包含這樣的值(本地),本地主機,ip地址的服務器的機器名的重複,點。

+0

做ighost,(本地),。\ SqlExpress和190.190.200.100,1433是指同一臺服務器嗎? – wdosanjos

+0

是的,它們是一樣的 – Ievgen

回答

1

如果這些連接字符串指的是同一個服務器,可靠地找出機器名的唯一方法是連接到服務器並運行以下命令:

select @@SERVERNAME 

示例代碼:

using (var cn = new SqlConnection(yourConnectionString)) 
{ 
    cn.Open(); 

    using (var cmd = new SqlCommand("Select @@SERVERNAME", cn)) 
    { 
     Console.WriteLine(cmd.ExecuteScalar()); 
    } 
} 
+0

這種方法對我來說的問題是用戶需要訪問數據庫。例如,如果使用Windows身份驗證,並且我運行腳本/ exe的用戶對數據庫沒有權限,則這不起作用。我需要解析服務器名稱而不連接到服務器。 – Ievgen

+0

如果用戶無權訪問數據庫,爲什麼需要首先驗證連接字符串? – wdosanjos

+0

1.我不需要驗證連接字符串,我需要從連接字符串中獲取機器名稱。 2.我的腳本將在NT系統帳戶或其他帳戶下運行,並將從不同來源獲取連接字符串。使用此連接字符串的實際應用程序可能運行在不同的帳戶 – Ievgen

相關問題