2009-10-23 64 views
5

如果安裝了SQL Server(Standard Edition),如何通過代碼獲取服務器名稱。安裝SQL Server(Standard Edition)時如何通過代碼獲取服務器名稱

我們在創建連接字符串以連接SQL Server時傳遞服務器名稱。我們可以通過代碼檢索這個值嗎?

string sqlConnectionString = string.Format(
"user id={0};password={1};server={2};Trusted_Connection=no;database=TestDB; 
connection timeout={3}", 
dirDBinfo.UserName, dirDBinfo.Password, "ServerName", dirDBinfo.TimeOut); 

回答

8

我不知道我明白你想要什麼。

如果你已經有了一個連接字符串,並嘗試由它在別處使用提取的服務器名稱,你可以反向工程,像這樣:

var parser = new SqlConnectionStringBuilder(connectionString); 
var serverName = parser.DataSource; 

如果你正在構建的連接字符串首次,那麼:

  1. 如果你知道你想連接到您的客戶端代碼執行在機器上的SQL Server,然後只使用(local)服務器名稱。如果SQL Server具有一個實例名稱,則將其指定爲:(local)\myinstancename
  2. 如果您事先不知道要連接什麼服務器,那麼取決於您是否從其他地方獲得該信息。
+1

我同意 - 這聽起來像Ashish正在試圖讓應用程序猜測使用哪個服務器,它根本無法做到。除了通過'(local)'選擇默認的本地實例之外,唯一的另一個明智的選擇是告訴服務器要使用的代碼。你如何做到這一點取決於你。 – 2009-10-23 13:41:27

0

是本地計算機上的服務器嗎?
如果是這樣,請將服務器名稱設置爲localhost
如果沒有,use SqlDataSourceEnumerator


此外,而不是使用建設一個String.Format連接字符串,你應該使用SqlConnectionStringBuilder。這將用分號處理值。

例如:

var builder = new SqlConnectionStringBuilder(); 

builder.UserID = dirDBinfo.UserName; 
builder.Password = dirDBinfo.Password; 
builder.Server= "localhost"; 
builder.UserID = dirDBinfo.UserName; 
builder["Trusted_Connection"] = "no"; 
builder.Database = "TestDB" 
builder.ConnectTimeout = dirDBinfo.TimeOut; 
+1

本地主機只有在不是命名實例時纔有效 – 2009-10-23 13:11:40

0

你就不能執行SELECT @@ SERVERNAME針對這方面?

+0

否;他正在嘗試構建連接字符串。 – SLaks 2009-10-23 12:49:12

+1

所以我們仍然在建立我們的連接字符串?在這種情況下,決定選擇哪個SQL服務器的邏輯是什麼?如果它是本地的,那麼正如你所說 - 只要使用本地主機。但我認爲我們已經通過了服務器名稱,現在我們需要在代碼中以某種方式檢索它... – DmitryK 2009-10-23 12:55:00

+0

正如我理解的問題,這就是他問的。 – SLaks 2009-10-23 12:55:58

相關問題