【问题标题】:How to get server name through code if SQL Server (Standard Edition) is installed如果安装了 SQL Server(标准版),如何通过代码获取服务器名称
【发布时间】:2009-10-23 12:43:25
【问题描述】:

如果安装了SQL Server(标准版),如何通过代码获取服务器名称。

我们在创建连接字符串以连接 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);

【问题讨论】:

    标签: c# .net sql-server ado.net connection-string


    【解决方案1】:

    我不确定我是否明白你想要什么。

    如果您已经有一个连接字符串,并且您正试图从中提取服务器名称以便在其他地方使用,您可以像这样对其进行逆向工程:

    var parser = new SqlConnectionStringBuilder(connectionString);
    var serverName = parser.DataSource;
    

    如果您是第一次构建连接字符串,那么:

    1. 如果您知道要连接到执行客户端代码的计算机上的 SQL Server,则只需使用 (local) 作为服务器名称。如果 SQL Server 有实例名称,则按如下方式指定:(local)\myinstancename
    2. 如果您事先不知道要连接到哪个服务器,那么您可以从其他地方获取该信息。

    【讨论】:

    • 我同意 - 听起来 Ashish 试图让应用程序猜测要使用哪个服务器,但它根本做不到。除了通过(local) 选择默认本地实例之外,唯一明智的选择是告诉代码要使用哪个服务器。如何做到这一点取决于您。
    【解决方案2】:

    你不能对这个连接执行 SELECT @@SERVERNAME 吗?

    【讨论】:

    • 所以我们还在构建我们的连接字符串?在这种情况下,决定选择哪个 SQL Server 的逻辑是什么?如果它是本地的,那么正如您所说 - 只需使用 localhost。但我认为我们已经传递了服务器名称,现在我们需要在代码中以某种方式检索它......
    • 据我了解,这就是他要问的问题。
    【解决方案3】:

    服务器是否在本地计算机上?
    如果是这样,请将服务器名称设置为 localhost
    如果没有,use SqlDataSourceEnumerator


    此外,您应该使用SqlConnectionStringBuilder,而不是使用String.Format 构建连接字符串。这将处理带有分号的值。

    例如:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2018-02-18
      相关资源
      最近更新 更多