0

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

4

4 回答 4

2

使用与语句的连接询问 SQL

SELECT @@SERVERNAME

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

于 2009-05-20T08:11:41.807 回答
1

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

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:确保在 System.Net 命名空间中添加 using 语句。

于 2009-05-20T07:18:55.237 回答
0

您可以检查SqlConnection.ConnectionString属性以查看它是否具有类似(local).在其server部分中的内容,但这不是很可靠,因为%systemroot%\system32\drivers\etc\hosts' and various other SQL Aliases, wherebyfoo-srv` 很可能是本地框。

于 2009-05-20T07:20:17.417 回答
0

我知道的最简单的方法是直接检查连接字符串以查看它是否包含单词 localhost、127.0.0.1、(localhost)、“。” 或本地机器名称。检查开始,因为它们可能是正在运行的 Sql 的本地命名实例。

您可以使用 System.Environment 库来检索当前机器名称。您还可以查看使用 .Net 中的 ConnectionBuilder 库来检索数据,而无需使用完整的字符串解析。可以在此处找到有关此的详细信息

于 2009-05-20T07:24:38.643 回答