我怎么知道数据库的实际地理位置?

时间:2011-10-28 06:59:20

标签: c# sql sql-server map gis

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

8 个答案:

答案 0 :(得分:7)

1 - Buy somethihng like this.这是UPS GPS接收器。

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

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

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

答案 1 :(得分:6)

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

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

修改

在Mono / iPhone上使用GPS:http://drdobbs.com/mobility/222600599

示例代码,单声道/ Android上的GPS:https://github.com/gshackles/Sample-Projects/blob/master/MonoDroid/MonoDroidSamples/MonoDroidSamples/DemoActivities/LocationDemo/LocationActivity.cs

答案 2 :(得分:6)

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

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

获得IP地址后,除非要支付IP位置数据库,否则需要使用HttpWebRequest加载http://www.iplocationfinder.com/65.55.23.107之类的内容。一旦你得到了对HttpWebRequest的响应,你可以使用正则表达式来解析位置名称,或者如果你需要那么解析纬度和经度。

答案 3 :(得分:4)

您是否拥有这么多服务器,这些服务器可以在您公司的一夜之间移动,还是用于云数据库设置? IP地址可能是一个基本的不准确 - 比没有起点更好。

答案 4 :(得分:2)

正如Davide Piras所提到的,您可以使用例如此站点:http://ip-lookup.net/来跟踪您的数据库服务器的IP地址,您可以使用常规表达式或http://htmlagilitypack.codeplex.com/来获取输出。

Bu只有在你能得到数据库服务器IP地址时才有效,我认为这不应该是一个问题,因为你需要连接字符串的IP。

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

HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");
            foreach (HtmlElement el in elc)
            {
                if (el.GetAttribute("type").Equals("text") && el.GetAttribute("name").Equals("ip"))
                {
                    el.InnerText = "Server IP";
                }
            }

下一个:

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

并尝试过滤输出,因为使用正则表达式我不是很好。您可以使用webbrowser1.DocumentText;

捕获输出

答案 5 :(得分:1)

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

Using SQL CLR Stored Procedure To Track IP Address - 但让CLR sproc返回其托管的服务器的ipaddress。

我看到你提到的Cody的天蓝色连接字符串,并认为这些是一个方便的链接: http://blogs.msdn.com/b/windowsazure/archive/2011/07/06/windows-azure-deployments-and-the-virtual-ip-address.aspx

Get Azure public IP address from deployed app

答案 6 :(得分:1)

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

SELECT DATEDIFF(hh, GETUTCDATE(), GETDATE()) AS ServerTimeZone

从这个结果中,您可以轻松添加一些逻辑来返回时区缩写,即ESTCST等。我知道这并不多,但希望它会有所帮助。

答案 7 :(得分:0)

如果某人已经在物理上移动服务器,为什么不写一些将相应位置写入DB的脚本?当机器启动时,自动启动该工具并让“移动器”选择一个位置。