SqlConnection - это удаленное или локальное соединение? - PullRequest
0 голосов
/ 20 мая 2009

Как определить, является ли это локальным соединением (localhost или 127.0.0.1) или удаленным (другим компьютером в локальной сети), если у меня есть объект SqlConnection?

Ответы [ 4 ]

2 голосов
/ 20 мая 2009

Задайте SQL, используя соединение с оператором

SELECT @@SERVERNAME

затем проверьте, совпадает ли это имя клиентского компьютера с Environment.MachineName, по модулю имени экземпляра SQL

1 голос
/ 20 мая 2009

Вы можете получить строку подключения из объекта 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: обязательно добавьте оператор using в пространство имен System.Net.

0 голосов
/ 20 мая 2009

Самый простой способ, который мне известен, это проверить строку соединения напрямую, чтобы увидеть, содержит ли она слова localhost, 127.0.0.1, (localhost), "." или имя локальной машины. Проверьте, чтобы начать с, поскольку они могут быть локальным именованным экземпляром Sql.

Вы можете использовать библиотеку System.Environment для получения имени текущего компьютера. Вы также можете посмотреть на использование библиотеки ConnectionBuilder в .Net для извлечения данных без использования полного анализа строк. Подробности об этом можно найти здесь

0 голосов
/ 20 мая 2009

Вы можете проверить свойство SqlConnection.ConnectionString, чтобы увидеть, имеет ли оно что-то вроде (local) или . в его части 'server, но это не очень надежно, поскольку %systemroot%\system32\drivers\etc\hosts' and various other SQL Aliases, whereby foo-srv` вполне может быть локальная коробка.

...