能不能在VC中动态配置ODBC(SQLServer数据库文件,而且本机上没有SQLServer2000)?百分相送,在线急等

rdqjuven 2003-12-07 04:46:59
能不能在VC中动态配置ODBC(SQLServer数据库文件,而且本机上没有SQLServer2000)?如果可以,请给出一个实例,谢谢!百分相送,在线急等
...全文
108 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingcaiyao 2003-12-07
  • 打赏
  • 举报
回复
动态配置Access的ODBC我就做过,主要是对注册表进行操作。你可以先试着手工建立一个基于SQL SERVER的ODBC数据源,然后再到HEKY_LOCAL_MACHINE\Software\ODBC中看看它的内容,然后在程序中去创建注册表的这个键就可以达到动态创建。
pig_2000 2003-12-07
  • 打赏
  • 举报
回复
//////////////////////////////////////////////////
//检查数据源
//首先判断是否可以正常连接数据源
//若正常连接,正确返回
//若没有数据源或数据源不能正常连接,则重新建立一个数据源
//注:这是以前做的一个项目,为了看着方便,
// 里边的很多变量都是全局变量或者宏改的
// 定义不是很规范,看起来有点累,呵呵

UINT CheckDSN()
{
//检测DSN及数据库是否可以正常连接
//LPCSTR lpszAttributes;
char szAttributes[200];
char DBfilename[50];
int i = 0;
RETCODE retcode;
SQLHANDLE hdbc;
SQLHANDLE henv;
char gDB_DSN_NAME[20];
char gDB_USERNAME[20];
char gDB_PASSWORD[20];
char gDB_DRIVER_TYPE[20];
char gDSN_DESCRIPTION[20];
char gDBFILENAME[20];
char gDB_DATABASE[20];

strcpy(gDB_DSN_NAME, "DB_DSN_NAME");
strcpy(gDB_USERNAME, "DB_USERNAME");
strcpy(gDB_PASSWORD, "DB_PASSWORD");
strcpy(gDB_DRIVER_TYPE, "DB_DRIVER_TYPE");
strcpy(gDSN_DESCRIPTION, "DSN_DESCRIPTION");
strcpy(gDBFILENAME, "DBFILENAME");
strcpy(gDB_DATABASE, "DB_DATABASE");

memset(szAttributes, 0, 200);
memset(DBfilename, 0, 50);
GetCurrentDirectory(50, DBfilename);

retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);

retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);

retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retcode = SQLConnect(hdbc,(SQLCHAR *)gDB_DSN_NAME,(SWORD)strlen(gDB_DSN_NAME),(SQLCHAR *)gDB_USERNAME,
(SWORD)strlen(gDB_USERNAME),(SQLCHAR *)gDB_PASSWORD,(SWORD)strlen(gDB_PASSWORD));

SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);

//DSN数据源名称
strcat(szAttributes, "DSN=");
strcat(szAttributes, gDB_DSN_NAME);
strcat(szAttributes, "\n");

//DSN数据源描述
strcat(szAttributes, "Description=");
strcat(szAttributes, gDSN_DESCRIPTION);
strcat(szAttributes, "\n");

//DriveerID
strcat(szAttributes, "DriverId=25");
strcat(szAttributes, "\n");

//数据库登录用户名
strcat(szAttributes, "UID=");
strcat(szAttributes, gDB_USERNAME);
strcat(szAttributes, "\n");

//数据库登录密码
strcat(szAttributes, "PWD=");
strcat(szAttributes, gDB_PASSWORD);
strcat(szAttributes, "\n");

//Access专有
//数据库文件全路径
strcat(DBfilename, "\\wydb.mdb");
strcat(szAttributes, "DBQ=");
strcat(szAttributes, gDBFILENAME);
strcat(szAttributes, "\n");


//SQL server 专有数据
//服务器名称
strcat(szAttributes, "SERVER=");
strcat(szAttributes, gDB_DRIVER_TYPE);
strcat(szAttributes, "\n");
//服务器数据库名称
strcat(szAttributes, "DATABASE=");
strcat(szAttributes, gDB_DATABASE);
strcat(szAttributes, "\n");

if((retcode != SQL_SUCCESS) && (retcode!=SQL_SUCCESS_WITH_INFO))
{
//整理szAttributes字符串,将'\n'替换为'\0'
while(szAttributes[i] != '\0')
{
if(szAttributes[i] == '\n')
{
szAttributes[i] = '\0';
}
i ++;
}

//添加一个SQL Server的ODBC数据源
//SQL Server,数据源为WYDSN,服务器为SERVER,数据库为WYGL-SERVER
//添加一个ODBC数据源
if(!SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, (LPSTR)gDB_DRIVER_TYPE, (LPSTR)szAttributes))
{
//创建新数据源成功
return TRUE;
}
else
{
//创建新数据源失败
return FALSE;
}
}
else
{
//数据库连接成功
return TRUE;
}
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧