资源描述:
《ODBC示例_MFC程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ODBC示例:MFC程序—by周子琳(Jersey16@163.com)关于前面两个步骤:SQLServer的相关检查和DSN的建立,请参照文档“ODBC示例_控制台程序.doc”。1.MFCODBC简介MFC对ODBC进行了封装,即MFCODBC。它简化了对ODBCAPI的调用,从而实现面向对象的数据库编程接口。MFCODBC的封装主要开发了CDatabase类和CRecordSet类1)CDatabase类CDatabase类用于应用程序建立与数据源的连接。CDatabase类中包含一个m_hdbc变量,它代表了数据源的连接
2、句柄。如果要建立CDatabase类的实例,应先调用该类的构造函数,再调用Open函数,通过调用,初始化环境变量,并执行与数据源的连接。在执行完所有操作后,通过Close函数关闭与数据源的连接。CDatabase类提供了对数据库进行操作的函数及事务操作。2)CRecordSet类CRecordSet类定义了从数据库接收或者发送数据到数据库的成员变量,以实现对数据集的数据操作。CRecordSet类的成员变量m_hstmt代表了定义该记录集的SQL语句句柄,m_nFields为记录集中字段的个数,m_nParams为记录集所使用的
3、参数个数。CRecordSet的记录集通过CDatabase实例的指针实现与数据源的连接,即CRecordSet的成员变量m_pDatabase。MFCODBC编程更适合于界面型数据库应用程序的开发,但由于CDatabase类和CRecordSet类提供的数据库操作函数有限,支持的游标类型也有限,限制了高效的数据库开发。2.MFC程序示例以下示例为VS2010中所建立的基于对话框的MFC工程:1.建好基于对话框的工程后,将ListControl控件拖动到对话框中;2.选中该控件,在“属性”选项卡中,将View选项值选为“Repo
4、rt”;3.为ListControl控件添加变量4.调整一下控件的大小5.打开工程的Dlg.cpp,在OnInitDialog()函数中的“//TODO:Addextrainitializationhere”后加入如下代码://对ListControl的格式进行设置m_List.SetExtendedStyle(m_List.GetExtendedStyle()
5、LVS_EX_GRIDLINES
6、LVS_EX_HEADERDRAGDROP
7、LVS_EX_TWOCLICKACTIVATE);CRectrect;m_List.Get
8、ClientRect(rect);intlistWidth=rect.Width();m_List.InsertColumn(0,_T("sno"),LVCFMT_LEFT,listWidth/5);m_List.InsertColumn(1,_T("sname"),LVCFMT_LEFT,listWidth/5);m_List.InsertColumn(2,_T("ssex"),LVCFMT_LEFT,listWidth/5);m_List.InsertColumn(3,_T("sage"),LVCFMT_LEFT,listW
9、idth/5);m_List.InsertColumn(4,_T("sdept"),LVCFMT_LEFT,listWidth/5);6.打开工程的Dlg.h文件,加入如下代码:加入头文件#include"afxdb.h",这是MFCODBC的头文件。在public处加入:7.在Dlg.cpp中加入VariantToCString的函数定义CStringCMFCDlg::VariantToCString(CDBVariant*var){CStringstr;//转换以后的字符串if(!var){str="NULLVarParam
10、eter";returnstr;}switch(var->m_dwType){caseDBVT_SHORT:str.Format(L"%d",(int)var->m_iVal);break;caseDBVT_LONG:str.Format(L"%d",var->m_lVal);break;caseDBVT_SINGLE:str.Format(L"%10.6f",(double)var->m_fltVal);break;caseDBVT_DOUBLE:str.Format(L"%10.6f",var->m_dblVal);brea
11、k;caseDBVT_BOOL:str=(var->m_boolVal==0)?L"FALSE":L"TRUE";break;caseDBVT_STRING:str=var->m_pstring->GetBuffer();break;caseDBVT_ASTRI