如何配置ODBC数据源??
BOOL CXXXXXX::SetupDSN()
{
HKEY hKey=NULL;
HKEY hODBC;
LONG lRet, lRet2;
DWORD dwLength, dwDataType;
TCHAR szPrevValue[32],szBuffer[32];
//======================================================
/* const TCHAR gzDatabase[] = _T("Database");
const TCHAR gzDriver[] = _T("Driver");
const TCHAR gzLastUser[] = _T("LastUser");
const TCHAR gzServer[] = _T("Server");
const TCHAR Database[] = _T("Notify");
const TCHAR Driver[] = _T("C:\\WINNT\\System32\\sqlsrv32.dll");
const TCHAR LastUser[] = _T("sa");
const TCHAR Server[] = _T("192.168.1.70"); */
//=======================================================
char szLangDLL[_MAX_PATH+14]; // Note: 8.3 name
GetSystemDirectoryA(szLangDLL, sizeof(szLangDLL));
CString str;
str.Format("%s\\sqlsrv32.dll",szLangDLL);
//Driver=(LPCSTR)str;
//================================================================
// 打开注册表键,不存在则创建!
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NotifyDSN,0, KEY_READ|KEY_WRITE, &hKey );
if( lRet != ERROR_SUCCESS )//不存在则创建!
{
RegOpenKeyEx(HKEY_LOCAL_MACHINE, gzODBC,0, KEY_READ|KEY_WRITE, &hODBC );
DWORD dw;
lRet=RegCreateKeyEx(hODBC,NotifyDSN,0, REG_NONE,REG_OPTION_NON_VOLATILE,
KEY_WRITE|KEY_READ, NULL,&hKey, &dw);
}
//1 查询数据源名是否存在
dwLength = sizeof( szBuffer );//不存在则创建!
lRet = RegQueryValueEx(hKey, gzDatabase, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )
lRet2 = RegSetValueEx( hKey, gzDatabase, 0, REG_SZ,(LPBYTE)Database, strlen( Database ) );
else // 存在, 比较二者是否相同
{
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzDatabase, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzDatabase );
lRet2 = RegSetValueEx( hKey, gzDatabase, 0, REG_SZ,(LPBYTE)Database, strlen( Database ) );
}
}
// 2查询驱动器是否存在
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx(hKey, gzDriver, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )//不存在则创建!
lRet2 = RegSetValueEx( hKey, gzDriver, 0, REG_SZ,(LPBYTE)(LPCSTR)str, strlen(str) );
else
{
// 存在, 比较二者是否相同
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzDriver, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzDriver );
lRet2 = RegSetValueEx( hKey, gzDriver, 0, REG_SZ,(LPBYTE)(LPCSTR)str, strlen( str ) );
}
}
//3 查询用户是否存在
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx(hKey, gzLastUser, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )//不存在则创建!
lRet2 = RegSetValueEx( hKey, gzLastUser, 0, REG_SZ,(LPBYTE)LastUser, strlen(LastUser ) );
else
{
// 存在, 比较二者是否相同
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzLastUser, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzLastUser );
lRet2 = RegSetValueEx( hKey, gzLastUser, 0, REG_SZ,(LPBYTE)LastUser, strlen( LastUser ) );
}
}
//4 查询服务器是否存在
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx(hKey, gzServer, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )//不存在则创建!
lRet2 = RegSetValueEx( hKey, gzServer, 0, REG_SZ,(LPBYTE)Server, strlen(Server ) );
else
{
// 存在, 比较二者是否相同
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzServer, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzServer );
lRet2 = RegSetValueEx( hKey, gzServer, 0, REG_SZ,(LPBYTE)Server, strlen(Server ) );
}
}
// 关闭注册表键
RegCloseKey( hKey );
return TRUE;
}
//=================================================================
我想动态配置ODBC,使用户可以访问SQL server 数据库。
我在应用程序通过以上命令将ODBC dada source 写入注册表,从而动态配置ODBC,
跨越 window NT 域的用户无需手动配置ODBC即可访问数据库。
但问题是:SQL server 却省使用 named pipe 方式访问,named pipe 方式不能跨越 window NT 域,我想使用TCP/IP客户访问方式,TCP/IP客户访问能跨越 window NT 域
,应该如何配置???
{
HKEY hKey=NULL;
HKEY hODBC;
LONG lRet, lRet2;
DWORD dwLength, dwDataType;
TCHAR szPrevValue[32],szBuffer[32];
//======================================================
/* const TCHAR gzDatabase[] = _T("Database");
const TCHAR gzDriver[] = _T("Driver");
const TCHAR gzLastUser[] = _T("LastUser");
const TCHAR gzServer[] = _T("Server");
const TCHAR Database[] = _T("Notify");
const TCHAR Driver[] = _T("C:\\WINNT\\System32\\sqlsrv32.dll");
const TCHAR LastUser[] = _T("sa");
const TCHAR Server[] = _T("192.168.1.70"); */
//=======================================================
char szLangDLL[_MAX_PATH+14]; // Note: 8.3 name
GetSystemDirectoryA(szLangDLL, sizeof(szLangDLL));
CString str;
str.Format("%s\\sqlsrv32.dll",szLangDLL);
//Driver=(LPCSTR)str;
//================================================================
// 打开注册表键,不存在则创建!
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NotifyDSN,0, KEY_READ|KEY_WRITE, &hKey );
if( lRet != ERROR_SUCCESS )//不存在则创建!
{
RegOpenKeyEx(HKEY_LOCAL_MACHINE, gzODBC,0, KEY_READ|KEY_WRITE, &hODBC );
DWORD dw;
lRet=RegCreateKeyEx(hODBC,NotifyDSN,0, REG_NONE,REG_OPTION_NON_VOLATILE,
KEY_WRITE|KEY_READ, NULL,&hKey, &dw);
}
//1 查询数据源名是否存在
dwLength = sizeof( szBuffer );//不存在则创建!
lRet = RegQueryValueEx(hKey, gzDatabase, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )
lRet2 = RegSetValueEx( hKey, gzDatabase, 0, REG_SZ,(LPBYTE)Database, strlen( Database ) );
else // 存在, 比较二者是否相同
{
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzDatabase, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzDatabase );
lRet2 = RegSetValueEx( hKey, gzDatabase, 0, REG_SZ,(LPBYTE)Database, strlen( Database ) );
}
}
// 2查询驱动器是否存在
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx(hKey, gzDriver, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )//不存在则创建!
lRet2 = RegSetValueEx( hKey, gzDriver, 0, REG_SZ,(LPBYTE)(LPCSTR)str, strlen(str) );
else
{
// 存在, 比较二者是否相同
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzDriver, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzDriver );
lRet2 = RegSetValueEx( hKey, gzDriver, 0, REG_SZ,(LPBYTE)(LPCSTR)str, strlen( str ) );
}
}
//3 查询用户是否存在
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx(hKey, gzLastUser, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )//不存在则创建!
lRet2 = RegSetValueEx( hKey, gzLastUser, 0, REG_SZ,(LPBYTE)LastUser, strlen(LastUser ) );
else
{
// 存在, 比较二者是否相同
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzLastUser, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzLastUser );
lRet2 = RegSetValueEx( hKey, gzLastUser, 0, REG_SZ,(LPBYTE)LastUser, strlen( LastUser ) );
}
}
//4 查询服务器是否存在
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx(hKey, gzServer, NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
if( lRet != ERROR_SUCCESS )//不存在则创建!
lRet2 = RegSetValueEx( hKey, gzServer, 0, REG_SZ,(LPBYTE)Server, strlen(Server ) );
else
{
// 存在, 比较二者是否相同
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gzServer, 0, &dwDataType, (LPBYTE)szPrevValue, &dwLength );
// 不相同则替换
if( lstrcmp( Database, szPrevValue ) )
{
lRet2 = RegDeleteValue( hKey, gzServer );
lRet2 = RegSetValueEx( hKey, gzServer, 0, REG_SZ,(LPBYTE)Server, strlen(Server ) );
}
}
// 关闭注册表键
RegCloseKey( hKey );
return TRUE;
}
//=================================================================
我想动态配置ODBC,使用户可以访问SQL server 数据库。
我在应用程序通过以上命令将ODBC dada source 写入注册表,从而动态配置ODBC,
跨越 window NT 域的用户无需手动配置ODBC即可访问数据库。
但问题是:SQL server 却省使用 named pipe 方式访问,named pipe 方式不能跨越 window NT 域,我想使用TCP/IP客户访问方式,TCP/IP客户访问能跨越 window NT 域
,应该如何配置???
...全文
相关推荐
vb 中设置odbc代码
#### 三、配置ODBC数据源在VB中动态配置ODBC数据源主要包括以下步骤:1. **理解注册表中的配置信息**:ODBC数据源的信息通常存储在Windows注册表中。
如何配置sql server ODBC数据源
#### 配置前提在开始配置 SQL Server ODBC 数据源之前,需要确保满足以下条件:1.
ODBC数据源配置以及数据导入导出
ODBC 数据源配置是指配置 ODBC 连接数据库的过程,包括配置 Oracle 数据源和 SQL Server 数据源。数据导入导出是指从一个数据库中导出数据,然后将其导入到另一个数据库中。
如何配置ODBC数据源详细
#### 配置前准备在开始配置ODBC数据源之前,确保已经安装了相应的数据库驱动程序。
linux操作系统配置ODBC数据源连接SQL Server
配置ODBC数据源安装完成后,需要配置ODBC数据源。这通常涉及到编辑`odbc.ini`和`odbcinst.ini`文件。


