【发布时间】:2013-11-01 01:22:54
【问题描述】:
我正在使用以下代码列出所有可用的 SQL Server(它是 taken from here):
DataTable servers = SqlDataSourceEnumerator.Instance.GetDataSources();
for (int i = 0; i < servers.Rows.Count; i++)
{
{
if ((servers.Rows["InstanceName"] as string) != null)
CmbServerName.Items.Add(servers.Rows["ServerName"] + "\\" + servers.Rows["InstanceName"]);
else
CmbServerName.Items.Add(servers.Rows["ServerName"]);
}
}
}
在我的本地系统(计算机名称 SERVER-1)上我有 SQL Server 2012 Express,在远程 SERVER-2 上我有 SQL Server 2008。所以当我运行此代码时,它会返回:
SERVER-1
SERVER-2\SQLSRVR2008INSTANCENAME
当它应该是:
SERVER-1\SQLEXPRESS
SERVER-2\SQLSRVR2008INSTANCENAME
我在这里做错了什么?
【问题讨论】:
-
SQL Browser 服务是否在 SERVER-1 上运行?您是否在防火墙中创建了例外以允许 UDP 端口 1434 的传入连接?
-
我可以连接和使用任何一个 SQL 服务器,所以是的,所有端口都配置正确。现在在这种情况下我需要 SQL Browser 做什么?
-
SQL Browser 允许您查看服务器上的实例。
-
有关 SQL 浏览器服务的详细信息,请参见此处。 bobpusateri.com/archive/2010/09/…
-
您是否 100% 确定 SERVER-1 上的本地 Express 实例真正命名为
SQLEXPRESS?在该机器上,如果您转到 SQL Server 配置管理器,您会在 SQL Server 服务下看到什么?您可能会看到SQL Server (MSSQL)(默认实例)而不是SQL Server (SQLEXPRESS)(命名实例)。您可以安装多个 SQL Express 实例,0 或 1 实际上可以是名为SQLEXPRESS的命名实例。所以仅仅因为它是 SQL Express 并不意味着实例名称自动为SQLEXPRESS。
标签: c# asp.net .net sql-server sql-server-2008