Visual Studio .NET 2002.NET 1.0DBAVisual Studio .NET 2003.NET 1.1Windows 2000Windows XP中级开发Visual StudioWindows.NETC#
动态添加 DSN 名称






3.90/5 (15投票s)
2004年7月7日
2分钟阅读

156524

1980
一个简单的类,用于动态地将 DSN 名称添加到您的系统中。
引言
首先,我想说的是,我通常使用 OLEDB 连接到我的数据库。但在 .NET Framework 中遇到一个错误(在欧洲,特别是荷兰的 Windows 系统上,由于不同的符号,小数部分丢失了),我别无选择,只能使用 ODBC。现在 ODBC 没有问题,它工作正常。除了……那些该死的 DSN 名称。我不想自己添加 DSN 名称,我在网上搜索,却发现……几乎什么都没有。在 Microsoft 论坛中找到了一些提示后,我决定写这篇文章,介绍如何使用 API 调用来动态创建 DSN 名称。
构建类
导入 API
为了导入包含我们 API 调用的 ODBCCP32.dll,我们必须包含 InteropServices
命名空间。
using System.Runtime.InteropServices;
现在是时候导入 DLL 并创建我们的属性了
[
DLLImport("ODBCCP32.dll")
]
private static extern bool SQLConfigDataSource(
IntPtr parent, int request, string driver, string attributes);
parent
参数指的是父窗口句柄,可以设置为 0。request
参数是一个从 1 到 6 的数字,指的是请求的操作。以下是这些值及其操作的列表
ODBC_ADD_DSN
(用于添加用户 DSN)ODBC_CONFIG_DSN
(用于配置用户 DSN)ODBC_REMOVE_DSN
(用于删除用户 DSN)ODBC_ADD_SYS_DSN
(用于添加系统 DSN)ODBC_CONFIG_SYS_DSN
(用于配置系统 DSN)ODBC_REMOVE_SYS_DSN
(用于删除系统 DSN)
driver
参数是驱动程序的名称,而 attributes
参数包含数据库路径和其他登录信息。
创建我们的方法
现在,是时候创建易于使用的了。假设我们总是连接到 Microsoft Access 数据库(目前)。在这种情况下,我们只需要提供 DSN 名称和数据库路径。在这种情况下,我们的 AddUserDSN
方法将是
public bool AddUserDSN(string DSName, string DBPath)
{
return SQLConfigDataSource((IntPtr)0, 1,
"Microsoft Access Driver (*.MDB)\0",
"DSN=" + DSName + "\0Uid=Admin\0pwd=\0DBQ=" + DBPath + "\0");
}
如果操作成功,该方法将返回 true
。现在我们可以使用以下语法调用我们的方法
DSNAdmin.AddUserDSN("MyDSNName", "C:\MyDBPath\MyDB.mdb");
不再需要在配置屏幕中进行操作,用户现在可以更改他们的数据库路径,而无需担心更改 DSN 属性。