如何通过连接获取 SQL 服务器的 IP 地址或 DNS 名称?

How get IP address or DNS name of SQL Server by connection?

我想知道我的应用程序何时 运行 在本地 SQL 服务器上。备份还原必备

我从 Connection.DataSource 获取服务器的 IP 地址(DNS 名称)。然后我检查列表中是否有这个名字:

localNames = new List<string>() 
{ 
    ".", "localhost", "(local)", "127.0.0.1", Environment.MachineName.ToLower(),
};
localNames.AddRange(GetIP().Select(a=>a.ToString()));

if (localNames.Contains(GetServer(connection.DataSource).ToLower()))
{
    //do something
}

方法:

IEnumerable<IPAddress> GetIP()
{
    foreach (var ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork))
    {
        yield return ip;
    }
}

string GetServer(string dataSource)
{
    return dataSource.Split('\').First().Split(',').First().Split(':').Last();
}

数据源可以是:

  • serverName1
  • serverName1,1433\SQLEXPRESS
  • 192.168.0.1
  • tcp:192.168.0.1,1433\SQLEXPRESS
  • ...