SqlConnection - 是远程还是本地连接?

时间:2009-05-20 07:13:29

标签: .net ado.net sqlconnection

如果我有SqlConnection对象,如何确定是本地连接(localhost还是127.0.0.1)还是远程连接(本地区域中的其他机器)?

4 个答案:

答案 0 :(得分:2)

使用与语句

的连接询问SQL
SELECT @@SERVERNAME

然后验证这是否与使用Environment.MachineName的客户端计算机的名称匹配,以SQL实例名称为模

答案 1 :(得分:1)

您可以从SqlConnection obejct中获取连接字符串。

string s = connection.ConnectionString;

并检查该字符串的数据源或服务器元素。

修改:提供代码示例。

我认为这个功能应该有效(不进行测试)。

private bool CheckConnectionStringLocalOrRemote(string connectionString) {

        //Local machine
        IPHostEntry entry = Dns.GetHostByAddress("127.0.0.1");

        IPAddress[] addresses = entry.AddressList;
        String[] aliases = entry.Aliases;
        string hostName = entry.HostName;           

        if(connectionString.Contains(hostName))
            return true;



        foreach (IPAddress address in addresses) {
            if (connectionString.Contains(address.ToString())) {
                return true;
            }
        }

        foreach (string alias in aliases) {
            if (connectionString.Contains(alias))
                return true;
        }


        return false;
    }

Ps:确保将using语句添加到System.Net命名空间。

答案 2 :(得分:0)

您可以检查SqlConnection.ConnectionString属性以查看其(local)部分中是否包含.server,但因{{1}而不可靠foo-srv`可能是一个本地框。

答案 3 :(得分:0)

我所知道的最简单方法是直接检查connectionstring以查看它是否包含localhost,127.0.0.1,(localhost),“。”等字样。或本地机器名称。检查是否因为它们可能是运行Sql的本地命名实例。

您可以使用System.Environment库来检索当前计算机名称。您还可以查看使用.Net中的ConnectionBuilder库来检索数据,而无需使用完整的字符串解析。有关详细信息,请访问here