2012-11-19 27 views
2

我正在嘗試這個,但我不知道如何繼續。你能幫我一下嗎?如何獲取我的網絡上可用的SQL Server列表?

SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance; 
DataTable table = instance.GetDataSources(); 

foreach (var row in table.Rows) 
{ 
    foreach (var column in table.Columns) 
    { 
      ddlPublisherServer.Items.Add(???); 
    } 
} 

其中??? = SQL Server名稱。

我該如何解決從表中提取sql server名稱?

我在C#中使用ASP .NET。

+0

Idk,把一個斷點放在那裏,看看列名稱和值。 – dotjoe

回答

8

好了,如果想看到所有可用的信息,您可以通過使用列迭代:

DataTable dt = SqlDataSourceEnumerator.Instance.GetDataSources(); 
foreach (DataRow dr in dt.Rows) 
{ 
    foreach (DataColumn col in dt.Columns) 
    { 
     Console.WriteLine("{0,-15}: {1}", col.ColumnName, dr[col]); 
    } 
    Console.WriteLine(); 
} 

這將顯示類似:

ServerName  : COMPUTER1 
InstanceName : SQLEXPRESS 
IsClustered : No 
Version  : 9.00.4035.00 

因此,要回答你的問題:

ddlPublisherServer.Items.Add(row[table.Columns["ServerName"]]); 

Full Code:

DataTable table = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources(); 
foreach (DataRow server in table.Rows) 
{ 
    ddlPublisherServer.Items.Add(server[table.Columns["ServerName"]].ToString()); 
} 
+0

我曾嘗試過,但它總是說「不能用[]對'object'類型的表達式應用索引」你知道爲什麼嗎? –

+0

@Testifier:哎呀,一半清醒。等一下,我會更新。 ;-) –

+0

@Testifier:忘了它想要一個'DataColumn'而不是索引。只需要傳遞你請求的列(在這種情況下,'table.Columns [「ServerName」]')。 –

相關問題