如何验证远程DSN条目?

时间:2011-06-24 19:37:00

标签: c# sql-server-2008 dsn

我正在创建一个验证实用程序,用于检查应用程序的各个部分以确保它们配置正确。我需要检查的一件事是Web.config文件中的DSN条目是功能性DSN,DSN指向正确的SQL服务器和数据库。

目前,您可以使用本地或远程两种模式之一运行该实用程序。当我尝试在本地计算机上验证远程系统DSN时,会出现问题。我知道为什么它不起作用,我的本地计算机上没有相同的DSN。所以我需要弄清楚的是如何从我有管理访问权限的远程机器上检索DSN连接信息,或者让远程机器为我验证它。

有什么建议吗?谢谢!

修改
显而易见,DSN信息也存储在注册表中!

oRegConn = new ConnectionOptions();
oRegConn.Username = username;
oRegConn.Password = password;
scope = new ManagementScope(@"//" + servername + @"/root/default", oRegConn);
registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);

inParams = registry.GetMethodParameters("GetStringValue");
inParams["sSubKeyName"] = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\\" + 
    dsnName;
inParams["sValueName"] = "Server";

outParams = registry.InvokeMethod("GetStringValue", inParams, null);
server = outParams["sValue"].ToString();

3 个答案:

答案 0 :(得分:0)

好吧,如果你在另一个系统(你的)上运行它,我会说它不是真正有效的检查。防火墙规则可能不同,驱动程序版本可能会关闭,还有一百万个。我要说的第一件事是,如果这是一个Web应用程序,则构建一个可以运行这些检查的页面,如状态页面。如果这是您无法执行此操作的应用程序,则可以使用WMI运行远程进程并收集结果。除此之外,您的最后一个选项可能是执行自托管WCF服务或您连接到的Windows服务以查询信息。这并不常见,我使用WMI做了很多次。

答案 1 :(得分:0)

在这种情况下,您可能想要调查PSExec(由Sysinternals提供)。只要您具有对该计算机的管理访问权限,就可以在“本地”模式下在远程计算机上运行实用程序。

您的“DSN验证”部分必须是单独的可执行文件/命令,您的主实用程序可以使用类似于以下语法执行:

psexec \\REMOTE-Machine <DSN Verification Utility>.exe

可以通过重定向stdout / stderr在C#中捕获输出。

如果我弄错了,请原谅我,但不只是打开与远程数据库服务器的连接,让你知道你的连接字符串/ DSN是否正常?

答案 2 :(得分:0)

因此DSN conn值以明文形式存储在注册表中,这正是我所需要的。

oRegConn = new ConnectionOptions();
oRegConn.Username = username;
oRegConn.Password = password;
scope = new ManagementScope(@"//" + servername + @"/root/default", oRegConn);
registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);

inParams = registry.GetMethodParameters("GetStringValue");
inParams["sSubKeyName"] = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources\\" + 
    dsnName;
inParams["sValueName"] = "Server";

outParams = registry.InvokeMethod("GetStringValue", inParams, null);
server = outParams["sValue"].ToString();