DSN 到连接字符串?
-
06-07-2019 - |
题
我们有一个 ASP.NET 网站,该网站使用一个数据库,我们希望能够使用连接字符串来访问该数据库。我们已经成功设置了一个 DSN 来连接到这个数据库,但我似乎无法发现连接字符串的正确魔力。
是否有一种直接的方法可以将 DSN 中的值转换为连接字符串?我知道从 UI 来看,对此没有明显的答案...每个数据库供应商都提供不同的 UI 来根据他们的需求创建 DSN。然而,我希望在用户界面下面它可能只是在幕后创建连接字符串之类的事情,我可以查看它以了解我做错了什么。这还有希望吗?如果是这样,有关于如何获取我需要的信息的指导吗?
(我已经去connectionstrings.com尝试确保我的连接字符串格式正确,但似乎没有任何效果......这就是为什么我尝试这种奇怪的translate-from-dsn tact。)
编辑: 我一定没有说清楚的是,我们不希望有 DSN 条目。我们已经创建了一个,并暂时使用了它,但我们希望能够摆脱它并使用连接字符串 没有 一个 DSN。
解决方案
如果您可以使用OLEDB,那么您可以创建 UDL文件。只需创建一个新的文本文档,test.udl
然后双击即可。填写对话框,然后使用记事本将其打开。瞧 - 这是你的连接字符串。
ODBC有点难度 - 您可以从ODBC管理员创建文件DSN,也可以在HKLM\Software\ODBC\ODBC.INI\<DSN Name>
中为系统DSN搜索注册表。你最终会得到一些名字/价值对。您应该能够将它们转换为连接字符串。 \\Driver
将列出实际的DLL,因此您需要从HKLM\Software\ODBC\ODBC Data Sources\\<DSN Name>
获取提供程序名称。
如果您可以使用OLEDB Provider for ODBC,那么您可以使用UDL技巧并让它从ODBC文件DSN构建连接字符串。 ODBC连接字符串将位于UDL的扩展属性中。
其他提示
如果您已创建DSN,则DSN 是ConnectionString!
您只需使用DSN=<YourDSNName>
并将其传递给OdbcConnection对象。
例如,使用C#:
string dsnName = "DSN=MyDSN";
using (OdbcConnection conn = new OdbcConnection(dsnName))
{
conn.Open();
}
或者,您可以使用 OdbcConnectionStringBuilder
类并设置其DSN
属性。
扩展Mark Brackett关于注册表的答案:对于64位Windows上的32位ODBC,注册表路径为HKLM \ Software \ Wow6432Node \ ODBC \ ODBC.INI \
就我而言,这足以:
- 删除标题
- 将所有新行替换为分号
- 使用大括号作为组分隔符
这是由 ODBC 数据源管理员创建的 DSN 文件(第三个选项卡 — 文件 DSN)
[ODBC]
DRIVER=MySQL ODBC 5.3 ANSI Driver
UID=MyUserName
PORT=3306
DATABASE=mydatabasename
SERVER=localhost
这是我的连接字符串的样子:
DRIVER={MySQL ODBC 5.3 ANSI Driver};UID=MyUserName;PORT=3306;DATABASE=mydatabasename;SERVER=localhost