程序自动配置数据源——修改注册表法
2011-01-17 02:24
253 查看
如果您使用过ODBC(Open Database Connectivity),那么对数据源一定不陌生。ODBC数据源就是命名的一组信息,包括需要连结的数据库所在位置、对应的ODBC驱动程序以及访问数据库所需的其他相关信息,用户可以通过数据源的名称来指定所需的ODBC连接。我们可以把数据源理解为一种数据连接的抽象。基于ODBC的应用程序要访问一个数据库都必须注册一个数据源。
DSNs(Data Source Names)按照其保存方式和作用范围分为三种:用户DSN、系统DSN和文件DSN。每个文件DSN保存在单独的一个文件中,文件可以在网络范围内共享;用户DSN保存在注册表中,只对当前用户可见;系统DSN页保存在注册表中,但对系统中的所有用户可见。用户DSN和系统DSN的区别在于,用户DSN保存在注册表的HKEY_CURRENT_USER下,而系统DSN保存在HKEY_LOCAL_MACHINE下。
通常可以通过控制面板中的ODBC Data Source来配置ODBC的数据源,也可以安装程序来完成。不管是手工还是由安装程序来配置数据源,都缺乏灵活性。其实我们还可以在程序中自动配置数据源。这里就将介绍如何通过修改注册表来配置数据源。
函数功能:配置ACCESS2000系统数据源
函数原形:BOOL CreateSource(CString strSourceName, CString strFileName, CString strDescription)
函数参数说明:
1. strSourceName: 数据源的名字
2. strSourceDb: 带完整路径的数据库名
3. strDescription:数据源描述
函数功能:删除ACCESS2000系统数据源
函数原形:BOOL DeleteSource(CString strSourceName)
函数参数说明:
1. strSourceName: 数据源的名字
DSNs(Data Source Names)按照其保存方式和作用范围分为三种:用户DSN、系统DSN和文件DSN。每个文件DSN保存在单独的一个文件中,文件可以在网络范围内共享;用户DSN保存在注册表中,只对当前用户可见;系统DSN页保存在注册表中,但对系统中的所有用户可见。用户DSN和系统DSN的区别在于,用户DSN保存在注册表的HKEY_CURRENT_USER下,而系统DSN保存在HKEY_LOCAL_MACHINE下。
通常可以通过控制面板中的ODBC Data Source来配置ODBC的数据源,也可以安装程序来完成。不管是手工还是由安装程序来配置数据源,都缺乏灵活性。其实我们还可以在程序中自动配置数据源。这里就将介绍如何通过修改注册表来配置数据源。
函数功能:配置ACCESS2000系统数据源
函数原形:BOOL CreateSource(CString strSourceName, CString strFileName, CString strDescription)
函数参数说明:
1. strSourceName: 数据源的名字
2. strSourceDb: 带完整路径的数据库名
3. strDescription:数据源描述
BOOL CreateSource(CString strSourceName, CString strFileName, CString strDescription) { HKEY hKey; DWORD dw; // 存放注册表 API函数执行的返回值 LONG lreturn; CString strSubKey; // 检测是否安装了 MS Access ODBC driver:odbcjt32.dll char sysDir[MAX_PATH]; char drvName[] = "//odbcjt32.dll"; GetSystemDirectory(sysDir, MAX_PATH); strcat(sysDir, drvName); CFileFind findFile; if (!findFile.FindFile(sysDir)) { AfxMessageBox("未安装MS Access的ODBC驱动程序odbcjt32.dll,无法注册数据源。", MB_OK | MB_ICONSTOP); return FALSE; } strSubKey = "SOFTWARE//ODBC//ODBC.INI//" + strSourceName; // 创建ODBC数据源在注册表中的子键 lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR) strSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dw); if (lReturn != ERROR_SUCCESS) { return FALSE; } // 设置数据源的各项参数 CString strDbq = strFileName; CString strDriver = sysDir; DWORD dwDriverId = 25; CString strFil = "MS Access;"; CString strPwd = strSourceName; DWORD dwSafeTransactions = 0; CString strUid = ""; ::RegSetValueEx(hKey, "DBQ", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR) strDbq), strDbq.GetLength()); ::RegSetValueEx(hKey, "Description", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR)strDescription), strDescription.GetLength()); ::RegSetValueEx(hKey, "Driver", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR)strDriver), strDriver.GetLength()); ::RegSetValueEx(hKey, "DriverId", 0L, REG_DWORD, (CONST BYTE*) (&dwDriverId), sizeof(dw)); ::RegSetValueEx(hKey, "FIL", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR) strFil), strFil.GetLength()); ::RegSetValueEx(hKey, "SafeTransactions", 0L, REG_DWORD, (CONST BYTE*) (&dwSafeTransactions), sizeof(dw)); ::RegSetValueEx(hKey, "UID", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR) strUid), strUid.GetLength()); ::RegCloseKey(hKey); // 创建ODBC数据源的Jet子键 strSubKey += "//Engines//Jet"; lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR) strSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dw); if (lReturn != ERROR_SUCCESS) { return FALSE; } // 设置该子键下的各项参数 CString strImplict = ""; CString strUserCommit = "Yes"; DWORD dwPageTimeout = 5; DWORD dwThreads = 3; DWORD dwMaxBufferSize = 2048; ::RegSetValueEx(hKey, "ImplicitCommitSync", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR) strImplict), strImplict.GetLength() + 1); ::RegSetValueEx(hKey, "MaxBufferSize", 0L, REG_DWORD, (CONST BYTE*) (&dwMaxBufferSize), sizeof(dw)); ::RegSetValueEx(hKey, "PageTimeout", 0L, REG_DWORD, (CONST BYTE*) (&dwPageTimeout), sizeof(dw)); ::RegSetValueEx(hKey, "Threads", 0L, REG_DWORD, (CONST BYTE*) (&dwThreads), sizeof(dw)); ::RegSetValueEx(hKey, "UserCommitSync", 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR) strUserCommit), strUserCommit.GetLength()); ::RegCloseKey(hKey); // 设置ODBC数据库引擎名称 strSubKey = "SOFTWARE//ODBC//ODBC.INI//ODBC Data Sources"; lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR) strSubKey, 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dw); if (lReturn != ERROR_SUCCESS) { return FALSE; } CString strDbType = "Driver do Microsoft Access (*.mdb)"; ::RegSetValueEx(hKey, strSourceName, 0L, REG_SZ, (CONST BYTE*) ((LPCTSTR) strDbType), strDbType.GetLength()); return TRUE; } |
函数原形:BOOL DeleteSource(CString strSourceName)
函数参数说明:
1. strSourceName: 数据源的名字
BOOL DeleteSource(CString strSourceName) { HKEY hKey; long lReturn; // 删除相关键值 CString strSubKey = "SOFTWARE//ODBC//ODBC.INI//ODBC Data Sources//"; lReturn = RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR) strSubKey, 0, KEY_WRITE, &hKey); if (lReturn != ERROR_SUCCESS) { return FALSE; } if (RegDeleteValue(hKey, strSourceName) != ERROR_SUCCESS) { RegCloseKey(hKey); return FALSE; } RegCloseKey(hKey); // 删除相关主键 strSubKey = "SOFTWARE//ODBC//ODBC.INI//" + strSourceName; if (RegDeleteKey(HKEY_LOCAL_MACHINE, strSubKey + "//Engines" + "//Jet") != ERROR_SUCCESS) { return FALSE; } if (RegDeleteKey(HKEY_LOCAL_MACHINE, strSubKey + "//Engines") != ERROR_SUCCESS) { return FALSE; } if (RegDeleteKey(HKEY_LOCAL_MACHINE, strSubKey) != ERROR_SUCCESS) { return FALSE; } return TRUE; } |
相关文章推荐
- 通过程序自动配置DSN(数据源)
- 在程序里修改配置文件
- 程序运行过程中直接配置数据源
- 修改开机自动启动的程序
- 利用winrar制作exe程序,如何配置解压后自动运行
- Shell脚本自动修改Linux网卡地址、IP地址配置、主机名修改
- 在程序里修改配置文件
- PropertyPlaceholderConfigurer 配置数据源 更安全,修改更方便
- 比较全面的Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)
- hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记
- Android Ant 自动打包 修改包名,修改logo,修改名字,修改配置
- 修改spark install4j配置文件使得安装程序语言为中文
- 在tomcat中用jndi配置数据源启动java web程序
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- Eclipse配置详解(包括智能提示设置、智能提示插件修改,修改空格自动上屏、JDK配置、各种快捷键列表……)
- pyton小程序自动备份网络设备配置
- openfire修改程序,使得在同一个分组里的用户,自动和该组admin互为好友
- 程序猿利器(四) wcf 自动生成终结点配置程序
- Linux环境thinkphp配置以及数据源驱动修改
- 通过程序修改注册表键值来达到修改IE配置参数的目的