SqlConnectionオブジェクトがある場合、それがローカル接続(localhostまたは127.0.0.1)であるか、リモート接続(ローカルエリアの他のマシン)であるかをどのように判断できますか?
4 に答える
ステートメントとの接続を使用してSQLに問い合わせる
SELECT @@SERVERNAME
次に、これがクライアントマシンの名前とEnvironment.MachineNameと一致するかどうかを確認し、SQLインスタンス名を法とします。
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ステートメントを追加してください。
SqlConnection.ConnectionString
プロパティをチェックして、その一部のようなものがある(local)
かどうかを確認できますが、 foo-srv`はローカルボックスである可能性があるため、信頼性は低くなります。.
server
%systemroot%\system32\drivers\etc\hosts' and various other SQL Aliases, whereby
私が知っている最も簡単な方法は、接続文字列を直接チェックして、localhost、127.0.0.1、(localhost)、"。"という単語が含まれているかどうかを確認することです。またはローカルマシン名。実行中のSQLのローカル名付きインスタンスである可能性があるため、で始まることを確認してください。
System.Environmentライブラリを使用して、現在のマシン名を取得できます。.NetのConnectionBuilderライブラリを使用して、完全な文字列解析を使用せずにデータを取得することもできます。これについての詳細はここで見つけることができます