我有一个用C#编写的Windows窗体应用程序。它连接到位于我的计算机上的SQL Server数据库(完整版的SQL Server 2012)。我需要将此应用程序移动到几个不同客户端的计算机上。客户端将使用的数据库将具有与我正在测试的数据库相同的所有字段,并且它将位于其计算机/服务器上。
我决定在应用程序启动时打开一个窗口,它将提供可用服务器,数据库和表的列表。表单启动时,服务器列表将填充下拉列表。当他们选择服务器时,下一个下拉列表中将显示数据库列表。当他们选择数据库时,将在最后一个下拉列表中显示一个表列表。当用户单击Log In
按钮时,它将更改App.config
文件中的连接字符串。
我有点工作,但似乎服务器列表不完整
public initializationForm()
{
InitializeComponent();
DataTable table = SqlDataSourceEnumerator.Instance.GetDataSources();
foreach (DataRow server in table.Rows)
{
if (!this.serverComboBox.Items.Contains(server[table.Columns["ServerName"]].ToString()))
{
this.serverComboBox.Items.Add(server[table.Columns["ServerName"]].ToString());
}
}
}
当我在文件资源管理器中转到我的网络列表时,列出了15个服务器。但是当我运行它时,只显示3个。我还尝试在使用SQL Server 2012 Express的开发服务器上安装它。开发服务器上的服务器名称为SOMESERVER\SQLEXPRESS
,但此代码仅显示SOMESERVER
。
如何获取文件资源管理器中显示的所有服务器,如何让它显示完整的服务器名称?谢谢你的帮助!
我用过的资源:
http://msdn.microsoft.com/en-us/library/a6t1z9x2%28v=vs.110%29.aspx
答案 0 :(得分:1)
您永远不会获得所有SQL服务器。有些未配置为广播它们的存在。有些人可能正在监听非标准端口。此外,SQL服务器广播实际上是网络广播,因此不会(通常)通过路由器传播。此外,您可能受到安全性的限制 - 即您必须具有浏览SQL服务器的权限。
所以,你最多可以使用它来查找一些服务器。您仍然需要客户端能够通过输入服务器名称和可能的逻辑凭证,备用端口/初始目录等来配置其服务器。
我还观察到,在某些环境中,这种浏览过程可能会令人沮丧 - 无法告诉您原因,从未调试过此。
ADDED
忘记提及,如果你在表中,有一个ServerName列(你使用的),还有一个InstanceName列,它将为你提供你所询问的servnamename \ instance。