推荐回答
数据库编程的思路都是一致的:打开数据库连接-》执行SQL语句-》获得查询结果-》关闭数据库连接,不同的数据库访问技术有不同的要求,比如用CAPI诘问MySql数据库的时候还得释放查询结果集。ODBC访问数据库得配置数据源配置ODBC数据源:打开控制面板下的“数据源”,弹出“ODBC数据源管理器”,选择DSN选项卡-》添加->你选择你的SQLServer选项,单击完成。如图然后你再按照向导提示添加。代码中用ODBC访问数据库你得加上afxdb.h头文件,用CDataBase类连接数据库、CRecordSet类查询记录。现在在VC访问数据库常用的是ADO访问,你可以找一下我前面的回答有ADO访问数据库的步骤。CDataBasem_cODBCDb;用CDataBase类的OpenEx::CoInitializeNULL;//释放COM对象::CoUninitialize。
赵颖馨2019-12-22 00:36:48
提示您:回答为网友贡献,仅供参考。
其他回答
-
接下来你就需要定义3个智能指针,_ConnectionPtrpConn;_CommandPtrpCmd;_RecordsetPtrpRst;一个是用于连接,一个是用于执行sql指令,还一个就是保存sql指令的结果集.比如你一条查询命令,然后循环输出查询的结果集到界面上.可以去CSDN上down一些ODBC连接数据库的demo,很有帮助哦。
龚子顺2019-12-22 00:54:47
-
1、MFC的ODBC类简介MFC的ODBC类对较复杂的ODBCAPI进行了封装,提供了简化的调用接口,从而大大方便了数据库应用程序的开发。程序员不必了解ODBCAPI和SQL的具体细节,利用ODBC类即可完成对数据库的大部分操作。MFC的ODBC类主要包括:CDatabase类:主要功能是建立与数据源的连接。CRecordset类:该类代表从数据源选择的一组记录.按照新的过滤或排序方法查询记录并重新建立记录集. 在调用Requery之前,可调用CanRestart来判断记录集是否支持Requery操作.要记住Requery只能在成功调用Open后调用,所以程序应调用IsOpen来判断记录集是否已建立.函数的声明为virtualBOOLRequery;throwCDBException,CMemoryException;返回TRUE表明记录集建立成功,否则返回FALSE.若函数内部出错则产生异常.BOOLCanRestartconst;//若支持Requery则返回TRUEBOOLIsOpenconst;//若记录集已建立则返回TRUE CRecordset类有两个公共数据成员m_strFilter和m_strSort用来设置对记录的过滤和排序.在调用Open或Requery前,如果在这两个数据成员中指定了过滤或排序,那么Open和Requery将按这两个数据成员指定的过滤和排序来查询数据源.成员m_strFilter用于指定过滤器.m_strFilter实际上包含了SQL的WHERE子句的内容,但它不含WHERE关键字.使用m_strFilter的一个例子为:m_pSet->m_strFilter=“CourseID=‘MATH101’”;//只选择CourseID为MATH101的记录ifm_pSet->OpenCRecordset::snapshot,“Section”......成员m_strSort用于指定排序.m_strSort实际上包含了ORDERBY子句的内容,但它不含ORDERBY关键字.m_strSort的一个例子为m_pSet->m_strSort=“CourseIDDESC”;//按CourseID的降序排列记录m_pSet->Open;......事实上,Open函数在构造SELECT语句时,会把m_strFilter和m_strSort的内容放入SELECT语句的WHERE和ORDERBY子句中.如果在Open的lpszSQL参数中已包括了WHERE和ORDERBY子句,那么m_strFilter和m_strSort必需为空.调用无参数成员函数Close可以关闭记录集.在调用了Close函数后,程序可以再次调用Open建立新的记录集.CRecordset的析构函数会调用Close函数,所以当删除CRecordset对象时记录集也随之关闭。10.5.5滚动记录CRecordset提供了几个成员函数用来在记录集中滚动,如下所示.当用这些函数滚动到一个新记录时,框架会自动地把新记录的内容拷贝到域数据成员中.voidMoveNext;//前进一个记录voidMovePrev;//后退一个记录voidMoveFirst;//滚动到记录集中的第一个记录voidMoveLast;//滚动到记录集中的最后一个记录voidSetAbsolutePositionlongnRows;该函数用于滚动到由参数nRows指定的绝对位置处.若nRows为负数,则从后往前滚动.例如,当nRows为-1时,函数就滚动到记录集的末尾.注意,该函数不会跳过被删除的记录.virtualvoidMovelongnRows,WORDwFetchType=SQL_FETCH_RELATIVE;该函数功能强大.通过将wFetchType参数指定为SQL_FETCH_NEXT、SQL_FETCH_PRIOR、SQL_FETCH_FIRST、SQL_FETCH_LAST和SQL_FETCH_ABSOLUTE,可以完成上面五个函数的功能.若wFetchType为SQL_FETCH_RELATIVE,那么将相对当前记录移动,若nRows为正数,则向前移动,若nRows为负数,则向后移动. 如果在建立记录集时选择了CRecordset::skipDeletedRecords选项,那么除了SetAbsolutePosition外,在滚动记录时将跳过被删除的记录,这一点对象FoxPro这样的数据库十分重要.如果记录集是空的,那么调用上述函数将产生异常.另外,必须保证滚动没有超出记录集的边界.调用IsEOF和IsBOF可以进行这方面的检测. BOOLIsEOFconst;如果记录集为空或滚动过了最后一个记录,那么函数返回TRUE,否则返回FALSE.BOOLIsBOFconst;如果记录集为空或滚动过了第一个记录,那么函数返回TRUE,否则返回FALSE。
齐文焕2019-12-22 00:19:03
-
两个根本不是一个类型的东西啊,虽然都是库。MFC是微软的基本类库,封装了非常多的底层API,包括窗口操作、文件操作、SOCKET等以及一些辅助类例如CString和一些模板类CList、CArray等。同时提供了DOC/VIEW的程序框架,并构造了消息的处理线路。以下内容来自:而STL是StandardTemplateLibrary,标准模板库。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。STL被内建在你的编译系统之内。在C++标准中,STL被组织为下面的13个头文件:、、、、、、、、、、、和。
龚安静2019-12-22 00:06:48