如果我有SqlConnection对象,如何确定是本地连接(localhost还是127.0.0.1)还是远程连接(本地区域中的其他机器)?
答案 0 :(得分:2)
使用与语句
的连接询问SQLSELECT @@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