【问题标题】:How do I get a list of SQL Servers available on my network?如何获取网络上可用的 SQL Server 列表?
【发布时间】:2012-11-19 20:59:41
【问题描述】:

我正在尝试这个,但我不确定如何继续。你能帮我一把吗?

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

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

在哪里??? = SQL 服务器名称。

我将如何从表中提取 sql server 名称?

我正在使用 C# 在 ASP .NET 中工作。

【问题讨论】:

  • Idk,在此处放置一个断点并查看该列的名称和值。

标签: c# asp.net sql-server


【解决方案1】:

好吧,如果想查看所有可用信息,您可以遍历可用的列:

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"]]);

完整代码:

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

【讨论】:

  • 我试过了,但它一直说“无法使用 [] 将索引应用于 'object' 类型的表达式”你知道为什么吗?
  • @Testifier:忘记了它想要DataColumn 而不是索引。只需传递您请求的列(在本例中为table.Columns["ServerName"])。
  • @Testifier:可能是编译时检测问题。而不是使用var 强行将它们声明为DataTableDataRow 并重试(我已经用我提到的内容更新了我的答案)。 编辑 另外,我假设ddlPublisherServerIEnumerable<String>?确保在 server[] 结果上调用 ToString()
  • 啊,你最后错过了“toString”。现在试试这个。
猜你喜欢
  • 1970-01-01
  • 2010-09-28
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
相关资源
最近更新 更多