我在用SQLConfigDataSource配置数据源的时候,我这样来写:
strcpy(TempString,"DSN=ShuJuKu");
TempLen=strlen(TempString);
NowLen=TempLen+1;
memcpy(tempattrib_A,TempString,TempLen);
tempattrib[TempLen]=0;
strcpy(TempString,"DESCRIPTION=数据源");
TempLen=strlen(TempString);
memcpy(&tempattrib[NowLen],TempString,TempLen);
NowLen +=TempLen;
tempattrib[NowLen]=0;
NowLen++; strcpy(TempString,"SERVER=");
TempLen=strlen(TempString);
memcpy(&tempattrib[NowLen],TempString,TempLen);
NowLen +=TempLen;
attribs="UseProcForPrepare=Yes\0OEMTOANSI=NO\0DataBase=dlcja\0";
memcpy(&tempattrib[NowLen],attribs,60);
if (!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Sql Server", (LPCSTR)tempattrib))
AfxMessageBox("创建ShuJuKu数据源失败"); 在数据源是Sql Sever的情况下,是成功的,但是当我把数据源换成是Oralce ODBC Driver或Microsoft ODBC for Oracle,配置又不会成功,是不是接口问题,还是微软在这方面有对oracle不兼容的方面。还有 SQLConfigDataSource配好后,为什么数据源为oracle的时候,UserID不显示。小弟在这里恳请高人指教。
strcpy(TempString,"DSN=ShuJuKu");
TempLen=strlen(TempString);
NowLen=TempLen+1;
memcpy(tempattrib_A,TempString,TempLen);
tempattrib[TempLen]=0;
strcpy(TempString,"DESCRIPTION=数据源");
TempLen=strlen(TempString);
memcpy(&tempattrib[NowLen],TempString,TempLen);
NowLen +=TempLen;
tempattrib[NowLen]=0;
NowLen++; strcpy(TempString,"SERVER=");
TempLen=strlen(TempString);
memcpy(&tempattrib[NowLen],TempString,TempLen);
NowLen +=TempLen;
attribs="UseProcForPrepare=Yes\0OEMTOANSI=NO\0DataBase=dlcja\0";
memcpy(&tempattrib[NowLen],attribs,60);
if (!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Sql Server", (LPCSTR)tempattrib))
AfxMessageBox("创建ShuJuKu数据源失败"); 在数据源是Sql Sever的情况下,是成功的,但是当我把数据源换成是Oralce ODBC Driver或Microsoft ODBC for Oracle,配置又不会成功,是不是接口问题,还是微软在这方面有对oracle不兼容的方面。还有 SQLConfigDataSource配好后,为什么数据源为oracle的时候,UserID不显示。小弟在这里恳请高人指教。
其函数原型如下:
BOOL SQLConfigDataSource(
HWND hwndParent, //父窗口句柄
UINT fRequest, //操作类型
LPCSTR lpszDriver, //数据库引擎名称
PLCSTR lpszAttributes //数据源配置属性
);
参数hwndParent是父窗口句柄, 如果把它设置为空NULL,ConfigDataSource将不显示数据源设置对话框,否则按照以下方式调用。比如:
SQLConfigDataSource(m_hWnd,ODBC_ADD_DSN,m_driver,attr);
fRequest的取值有以下几种
ODBC_ADD_DSN 增加一个数据源 ODBC_CONFIG_DSN 配置修改一个存在的数据源
ODBC_REMOVE_DSN 删除一个已经存在的数据源
ODBC_ADD_SYS_DSN ODBC_CONFIG_SYS_DSN ODBC_REMOVE_SYS_DSN 就是系统的了
而参数lpszDriver是数据库引擎的名称,比如是加载的是ACCESS数据库, 那么名称就是"Microsoft Access Driver(*.mdb)"
参数lpszAttributes为一连串形如"KeyName=***"的字符串,两个keyname之间用"\0"字符隔开。其主要是数据源缺省的驱动程序注册说明,而最主要的关键字是新数据源的名称DSN,其余关键字则根据不同的数据源有不同的要求。获取系统中已经安装的数据库驱动器信息可以通过SQLGetInstalledDrivers函数来实现。该函数定义如下:
BOOL SQLGetInstalledDrivers(
LPSTR lpszBuf, //保存驱动器信息的缓冲区
WORD cbBufMax, //缓冲区最大长度
WORD * pcbBufOut //返回的实际使用的缓冲区长度
);