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;
    }

追伸:System.Net名前空間にusingステートメントを追加してください。

于 2009-05-20T07:18:55.237 に答える
0

SqlConnection.ConnectionStringプロパティをチェックして、その一部のようなものがある(local)かどうかを確認できますが、 foo-srv`はローカルボックスである可能性があるため、信頼性は低くなります。.server%systemroot%\system32\drivers\etc\hosts' and various other SQL Aliases, whereby

于 2009-05-20T07:20:17.417 に答える
0

私が知っている最も簡単な方法は、接続文字列を直接チェックして、localhost、127.0.0.1、(localhost)、"。"という単語が含まれているかどうかを確認することです。またはローカルマシン名。実行中のSQLのローカル名付きインスタンスである可能性があるため、で始まることを確認してください。

System.Environmentライブラリを使用して、現在のマシン名を取得できます。.NetのConnectionBuilderライブラリを使用して、完全な文字列解析を使用せずにデータを取得することもできます。これについての詳細はここで見つけることができます

于 2009-05-20T07:24:38.643 に答える