2009-10-23 69 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

相关问题