C# 如何知道数据库的实际地理位置?

C# 如何知道数据库的实际地理位置?,c#,sql,sql-server,map,gis,C#,Sql,Sql Server,Map,Gis,我的任务是通过C#代码获取我们的SQL Server数据库的地理位置,因为它可能会因频繁重新定位数据库而不时变化,以保护其免受物理和网络伤害。这是可能的还是我老板的另一个梦想提前感谢。买一部iPhone/Android手机,并将其安装到装有数据库的机器顶部。编写一个快速应用程序,让它查看GPS API,并使用HTTPS上的某种JSON/SOAP API将其位置发布到手机连接的数据库中(出于安全目的) 然后,您可以从使用C#的位置访问GPS信息 编辑 在Mono/iPhone上使用GPS: 示例代

我的任务是通过C#代码获取我们的SQL Server数据库的地理位置,因为它可能会因频繁重新定位数据库而不时变化,以保护其免受物理和网络伤害。这是可能的还是我老板的另一个梦想提前感谢。

买一部iPhone/Android手机,并将其安装到装有数据库的机器顶部。编写一个快速应用程序,让它查看GPS API,并使用HTTPS上的某种JSON/SOAP API将其位置发布到手机连接的数据库中(出于安全目的)

然后,您可以从使用C#的位置访问GPS信息

编辑

在Mono/iPhone上使用GPS:


示例代码,Mono/Android上的GPS:

您的公司是否有这么多服务器在夜间移动,或者这是用于云数据库设置?IP地址可能是一个基本的不准确的起点。

正如Davide Piras所提到的,您可以使用这个站点:跟踪您的DB服务器的IP地址,您可以使用常规的Expresion或获取输出

但是,只有当您能够获得DB服务器IP地址时,这才有效,我认为这不应该是一个问题,因为您需要连接字符串的IP

要实现这一点,请使用WebBrowser控件,执行
webbrowser1.navigate(“http://ip-lookup.net/");
比:

下一步:

HtmlElement form = webBrowser1.Document.GetElementById("form_single_IP");
            if (form != null)
                form.InvokeMember("submit");
             //Submit the form

并尝试过滤输出,因为我不太擅长使用正则表达式

最简单的解决方案是进行DNS查找,然后按照Cody的建议使用IP定位服务。试试这个:

var foo = Dns.GetHostEntry("database.windows.net");

获得IP地址后,您需要加载类似于使用HttpWebRequest的内容,除非您想为IP位置数据库付费。一旦得到对HttpWebRequest的响应,就可以使用正则表达式来解析位置名称,或者如果需要,可以使用纬度和经度来解析位置名称。

为什么不使用数据库来告诉您位置?为了澄清我的意思:

-但要使CLR存储过程返回其托管服务器的IP地址

我看到了你向Cody提到的azure连接字符串,认为这些链接很方便:


从SQL Server中确定时区可能是您能做的最好的方法,但根据您的描述,这对您来说已经足够了。您可以使用此查询获取服务器所在时区的GMT偏移量:

SELECT DATEDIFF(hh, GETUTCDATE(), GETDATE()) AS ServerTimeZone
从这个结果中,您可以轻松添加一些逻辑来返回时区缩写,即
EST
CST
,等等。我知道这并不多,但希望它能有所帮助。

1-这是一个UPS GPS接收器

2-将其连接到服务器计算机

3-编写批处理或shell脚本,调用GPS软件并返回当前位置



4-使用
xp\u cmdshell
调用此脚本并通过SQL Server查询返回当前位置。

如果有人已经实际移动了服务器,为什么不编写一些脚本将相应位置写入数据库?当机器启动时,自动启动该工具并让“移动器”选择一个位置。

也许这就是你要找的:我要问——为什么?为什么数据库的物理位置很重要?我想知道为什么数据库移动得如此频繁?。。。除非你做了违法的事。。把服务器放在一个安全的服务器机房里会安全得多。。。因为如果你最终通过dns地址或其他类似的公开呼叫来识别服务器,你可能无法保护它免受网络伤害。更重要的是,一次又一次地重新定位服务器的实际行为可能比将服务器放在可靠、安全的位置更容易成为一个弱点。这并不违法,这是出于正当理由;)我可能回答得太早了,但您能否澄清一下,您是否使用Azure托管数据库?或者它是另一个云提供商?但我可以用它从他当前位置的数据库中做出响应吗?这可能更准确,但如果数据中心隔离良好,手机没有信号怎么办?还需要大量的硬件来购买…@DavidePiras我可能应该注意到这不是一个严肃的答案,尽管它是完全可行的。但是,为什么要买这么多硬件呢?它只是一部安卓手机。。。你可以假设用Mono C#编写应用程序。数据库服务器已经存在。@Moo Juice我认为这是一个好主意,但是通过简单使用纯文本和代码,这里有什么可以逃避的地方吗?尽管是开玩笑,但这是值得考虑的。你想知道地点吗?使用全球定位系统。IP不可靠,但这个是给我的?不适用于数据库所在的服务器,对吗?@AllanChua不,您需要获取数据库服务器IP地址,使用这种类型的网站(服务),您可以找到数据库服务器的地理位置(不太精确,但可以正常工作)你能给我一个方法吗?当你只有到有别名的数据库的连接字符串时,你能给我一个方法吗?@AllanChua我会更新我的问题这是azure客户端jd39urj4j4.database.windows.netYeah.的连接字符串示例。。这也有助于检查这些小工具返回的gps位置是否正确,谢谢:)+1该设备很酷,但就像我建议的CLS存储过程xp_cmdshell不会在azure上运行(但OP尚未澄清其azure)-但如果他可以插入USB设备,则不会cloud@JeremyThompson-是的,不清楚是不是云。如果这是明显的,这将不会真正起作用。
SELECT DATEDIFF(hh, GETUTCDATE(), GETDATE()) AS ServerTimeZone