【问题标题】:Extract machine name from connection string [duplicate]从连接字符串中提取机器名称[重复]
【发布时间】:2014-02-15 04:32:54
【问题描述】:

有人知道如何从 SQL 连接字符串中提取机器名称吗? 例如,对于以下连接字符串,当在机器“ighost”上运行应用程序/脚本时,其 ip 地址为 190.190.200.100:

"Server=ighost;Database=myDataBase;User Id=myUsername;Password=myPassword;"
"Server=(local);Database=myDataBase;User Id=myUsername;Password=myPassword;"
"Server=.\SqlExpress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
"Server=190.190.200.100,1433;Database=myDataBase;User Id=myUsername;Password=myPassword;"

我想得到结果,只是机器名:

ighost

这不是上述问题的重复,因为我不是在问如何解析连接字符串,而是在问即使连接字符串服务器属性包含诸如(本地)、本地主机、ipaddress、点之类的值,如何查找服务器机器名称。

【问题讨论】:

  • ighost,(local),.\SqlExpress,和190.190.200.100,1433是指同一个服务器吗?
  • 是的,它们是一样的

标签: sql-server powershell ado.net connection-string


【解决方案1】:

如果这些连接字符串指的是同一台服务器,那么可靠地找出机器名称的唯一方法是连接到服务器并运行以下命令:

select @@SERVERNAME

示例代码:

using (var cn = new SqlConnection(yourConnectionString))
{
    cn.Open();

    using (var cmd = new SqlCommand("Select @@SERVERNAME", cn))
    {
        Console.WriteLine(cmd.ExecuteScalar());
    }
}

【讨论】:

  • 对我来说这种方法的问题是用户需要访问数据库。例如,如果使用 Windows 身份验证并且我运行脚本/exe 的用户没有对数据库的权限,这将不起作用。我需要在不连接服务器的情况下解析服务器名称。
  • 如果用户没有访问数据库的权限,为什么要首先验证连接字符串?
  • 1.我不需要验证连接字符串,我需要从连接字符串中获取机器名称。 2. 我的脚本将在 NT System 帐户或其他帐户下运行,并且会从不同的来源获取连接字符串。使用此连接字符串的实际应用程序可能在不同的帐户下运行
  • 谢谢,试图找到更多,但这看起来确实是唯一可靠的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多