版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、通过ODB薨接数据库(C+)C+弛接数据库的方法有很多种,在Visual C+和SQL server的实际开发中,一般使用ODBC或ADO技术进行开发,相关技术和产品也最为成熟。我们这里根据课程需要采用ODBC的方法。我使用的平台的是 VS2010和SQL server 2008,优点是 VS2010支持一些比较新的特性,编程方便了很多,缺点是左侧的“服务器资源管理器”不支持 SQL server 2000,但是没有关 系,在SQL server 2008上是可以连上的,大家如果和我的平台不一样的话在编程细节上可 能有些问题要注意下。有同学表示安装了 SQL server 2008 之后只能通
2、过"windows身份验证"登陆本地数据库,无法通过"SQLserver身份验证"登陆,这是由于安装的时候是通过" windows身份验证"安装的,改一下配置即可:1.使用"windows身份验证”登陆数据库,点击"登录名” ,右击sa,选择属性,点击状M帛规服籍器角色用户映射状态设置是否允许连接到教据库引擎°授予O拒绝如登录:O启用C禁用僵)态,确保设置如左侧图所示。2. 右击本地服务器名选择属性,更改安全性中的服务器身份验证如下图所示P匚(SqLSorvwJlW.2531 -曰段务- KOUSOUKE
3、N-PC观存理摇据耕限 联常向妁富连数高M &_r_rM.M 一+M一4 - E 一扇一备接(0卜名否'M脚本以帮助服矣器身份戴证身份险证模式0(0鼻SQL Server和Windows身份验证模式僵)3.右击地服务器名选择重新启动(这一部很重要)4. 如何还有问题的话查看目录 "D:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLLog ” 下的 ERRORLOG 文件,找到错误代码, google 之打开SQL server 2008连接一个我们测试用的数据库,使用的 10.214.6.98上的数据
4、库db27,用户名和密码都是 user277,执行以下命令:use db27CREATE Tablebook (bnochar ( 8),categorychar (10),titlevarchar (40) not null,pressvarchar ( 30) not null,byearint CHECK( byear > 0 )authorvarchar (20) not null,pricedecimal (7, 2) CHECK( price > 0 ),totalintCHECK( total>=0 ),stockintCHECK( stock>=0 ),
5、CONSTRAINT ckCHECK( stock<=total)INSERT INTO bookVALUES('12345678','数据库','数据库系统原理教程','清华大学出版社',1998,王珊',27.9 , 3, 0)INSERT INTO book VALUES('12342378','数据库','数据库','清华大学出版社',1998 ,'王珊',27.9,3, 0)INSERT INTO bookVALUES('
6、;12341278','数据库','数据库','清华大学出版社',1998 ,'王珊',27.9,3, 0)INSERT INTO bookVALUES('14345678','数据库','数据库','清华大学出版社',1998 ,'王珊',27.9,3, 0)上面SQL语句执行的结果是在 db27数据库中创建了一个名为book的表,里面有9列,随后添加了 4个测试数据,现在将该数据源添加到ODBC数据源管理器中,打开路径“控制面板所有控制面板
7、项 管理工具”下的数据源(ODB。,添加新的数据源,选择 SQLServer”名称设置为db27,服务器在10.214.6.98,使用user277用户登录,完成后点击测试数据源看能不能连上,显示测试成功后,在用户数据源中会看到刚刚添加的DSN:我们编写一个简单的图形化界面,打开VS2010,新建项目,选择“ MFC应用程序”,建立一个名为“ DataBaseODBC的项目,弹出的向导中更改应用程序类型为“基于对话框”,大家在实际编程中可以需要选择,这里只是为了做个示例,其他保持默认。点击工具箱中“ListControl”空间,拖到面板中,完成之后应该是下图这个样子:-?些 Static Te
8、xt暖 Picture Control 函 Hprizo-ntalBar§ Vertical Scroll BarSlider Control 手 Spin Control EE Progress Control < Hot Key日 List Controlhj Tree Control 童 Tab Corrtrol 日 Animation Contrail 丝 Rich Edit Control 座 Date Timr& Picker 国 Month Calendar Cc-,- IP Address Control 兰至 ExtiE-nde-d Combo B.
9、唱ControlSy&Link ControlDataB a seODBC.rc.DIALOG -调整控件的view属性为Report,如下图所示,控件的样式会有相应的改变。21 CfitaBnscODBC* P xIDC.USTl CList Control) ILktE,Static Edge FakeTransparent False£邑色邑红邑色曲11点洋专宙败«奥h之一;®(lcon).小图标如 m_ListCtrlfrcrii 5il需I择带fR右击ListControl,添加变量,在对话框中输入名称, 添加成苣.变量向导-Data BaseO
10、DBC欢迎使用添加成员袤里向导访间);public 71控件寰里(0:)娈里类型(Y):控件H)如):类别:CListCtrlviBcjisnControl变里名® :控件类型堡):最大字符数区):|h_Li§ tC1SysListVi 32最'值QP:最大值®):5坷传入n福面7顷注粹®(/不需要表示法):将这个ListControl设置成9列,并设置一些格式:CRect rc;m_ListCtrl.GetWindowRect(&rc);/ 获取控件大小/设置了 9列,大小是一样的m_ListCtrl.InsertColumn(0, _
11、T("书号"),LVCFMT_CENTER, rc.Size().cx/9, 0);m_ListCtrl.InsertColumn(1, _T(m_ListCtrl.InsertColumn(2, _T(m_ListCtrl.InsertColumn(3, _T(m_ListCtrl.InsertColumn(4, _T(m_ListCtrl.InsertColumn(5, _T(m_ListCtrl.InsertColumn(6, _T(m_ListCtrl.InsertColumn(7, _T(m_ListCtrl.InsertColumn(8, _T("类别
12、"),LVCFMT_CENTER, rc.Size().cx/9, 1);"书名"),LVCFMT_CENTER, rc.Size().cx/9, 2);"出版社"),LVCFMT_CENTER, rc.Size().cx/9, 3);"出版年份"),LVCFMT_CENTER, rc.Size().cx/9, 4);"作者"),LVCFMT_CENTER, rc.Size().cx/9, 5);"价格"),LVCFMT_CENTER, rc.Size().cx/9, 6);"
13、;总藏书量"),LVCFMT_CENTER, rc.Size().cx/9, 7);"目前库存数"),LVCFMT_CENTER, rc.Size().cx/9, 8);/LVS_EX_GRIDLINES是希望显示网格;/LVS_EX_FULLROWSELECT是希望被选中时整行反色显示;/LVS_EX_HEADERDRAGDROP 是让其支持点击表头排序;/LVS_EX_TWOCLICKACTIVATE 是希望有鼠标在未被选中的行上移动的时候有一些效果m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle(
14、) | LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP |LVS_EX_TWOCLICKACTIVATE);把这些代码放在 BOOL CDataBaseODBCDlg:OnInitDialog(炉数的return前,运行就有相应的效果。在头文件 DataBaseODBCDlg.h 中添加 #include "afxdb.h" , "afxdb.h"即 MFC的ODBC!包括以下要用到的类:CDatabas缺:主要功能是建立与数据源的连接。CRecordse换:该类代表从数据源选
15、择的一组记录(记录集),程序可以选择数据源中的某个表作为一个记录集,也可以通过对表的查询得到记录集,还可以合并同一数据源中多个表的列到一个记录集中.通过该类可对记录集中的记录进行滚动、修改、增加和删除等操作。CDBExceptio成:代表ODBC!产生的异常。概括地讲,CDatabase#对某个数据库,它负责连接数据源;CRecordset#对数据源中的记录集,它负责对记录的操作。在头文件中添加一些定义,其中CDBVarian附象表示用于MFC ODBC!的可变数据类型。private:CDatabase m_db; public :/将CDBVariant转化成字符串CString Vari
16、antToCString(CDBVariant* var);为了方便,我就不添加新的按钮,双击对话框的“确定”按钮,进入函数,注释掉里面 的OnOK函数,添加如下代码:/连接数据库,打开数据源,这里的 DSN就是之前在ODBC中设置的DSNif(!m_db.IsOpen() && !m_db.OpenEx(_T( "DSN=db27;UID=user277;PWD=user277" ), CDatabase:openReadOnly | CDatabase:noOdbcDialog)(MessageBox(L "连接错误!"); retu
17、rn;)/CRecordset类:代表从数据源选择一组记录(记录集)CRecordset m_set(&m_db);/Open方法打开记录集m_set.Open(CRecordset:forwardOnly,_T( "SELECT * from book"),CRecordset:readOnly);CDBVariant var; /记录有数据的类型和数据的值,它封闭了 VARIANT数据类型m_ListCtrl.DeleteAllItems();删除所有的项目short nFields = m_set.GetODBCFieldCount(); / 得到列的数目in
18、t i = 0;/添加所有内容到控件while (!m_set.IsEOF()(for(short index = 0; index < nFields; index+)(m_set.GetFieldValue(index, var);/ do something with varValue/W加一行记录if(index = 0)m_ListCtrl.InsertItem(i, VariantToCString(&var);继续增加记录的其他项elsem_ListCtrl.SetItemText(i, index, VariantToCString(&var);)m_se
19、t.MoveNext();i+;)m_set.Close(); /凡打开m_db.Close(); 皆关闭VariantToCSting函数将 CDBVariantX寸象转成 CString,用以显示。CString CDataBaseODBCDlg:VariantToCString(CDBVariant* var)(CString str; /转换以后的字符串if(!var)(str = "NULL Var Parameter"return str;)switch (var->m_dwType)(case DBVT_SHORT:str.Format(L ”%d” ,
20、(int)var->m_iVal);break;case DBVT_LONG:str.Format(L "%d" ,var->m_lVal);break;case DBVT_SINGLE:str.Format(L "%10.6f" ,(double )var->m_fltVal);break;case DBVT_DOUBLE:str.Format(L "%10.6f" ,var->m_dblVal);break;case DBVT_BOOL:str = (var->m_boolVal=0) ?L &quo
21、t;FALSE" : L"TRUE"break;case DBVT_STRING:str = var->m_pstring->GetBuffer();break;case DBVT_ASTRING:str = var->m_pstringA->GetBuffer();break;case DBVT_WSTRING:str = var->m_pstringW->GetBuffer();break;case DBVT_DATE:str.Format(L "%d-%d-%d" ,(var->m_pdate)-
22、>year,(var->m_pdate)->month,(var->m_pdate)->day );break;default:str.Format(L "Unk type %dn" ,var->m_dwType);TRACE(L "Unknown type %dn" ,var->m_dwType);return str;根据CDBVarian浬的m_dwType属性可以知道里面的内容是什么类型的,然后对应的显示就OK了,其中DBVT_DAT房性可以根据需要自己更改格式。至此,运行程序,点击“确定”按钮就能看到图
23、示结果,可以完成查询工作了。必 DataBa&eODBC书号 类别 书名 出版社 出版 作者 倚格 总显 目前12341.123421234514345据据据据B数教数& & B s99豹乾风I I"I王王王afl珊珊27.903027.903027.903027.9030确定取消不妨再添加一个"button ”控件用以添加记录,从工具集中拖一个button控件,双击标记代码:void CDataBaseODBCDlg:OnBnClickedBtnadd()(/ TODO:在此添加控件通知处理程序代码if(!m_db.IsOpen() &&a
24、mp; !m_db.OpenEx(_T( "DSN=db27;UID=user277;PWD=user277" ), CDatabase:openReadOnly | CDatabase:noOdbcDialog)(MessageBox(L "连接错误!"); return ;try(m_db.ExecuteSQL(_T("INSERT INTO book VALUES")_T("('87654321','其他','其他 1','浙江大学出版社',1984,
25、39;韩寒',12.9,4,2)");catch (CDBException* pe)(/ The error code is in pe->m_nRetCodepe->ReportError();pe->Delete();m_db.Close();运行后,点击新添加的按钮可以增加一条记录。吕 Data BaseODBC书号 类引 书名 出版社 出版 作者 价格 总藏 目前1234L.12342. .12345. . 14345 87654报掀梅捣他数数数数其数数瑚够991991一I934fflflaHe王王王27.903027.903027.903027.90 3012.90 42招加 碇 1 肖 '再添加一个可以实现删除的 button ,双击之后添加代码如下。POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();if (pos = NULL)TRACE(_T( "No items were selected!n");elsewhile (pos)得到选中的itemint nItem = m_Lis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年郑州市中原银行农村普惠金融支付服务点招聘备考题库及1套完整答案详解
- 旅馆治安管理制度
- 2025年兴业银行拉萨分行社会招聘备考题库及答案详解参考
- 2025年为枣庄市检察机关公开招聘聘用制书记员的备考题库及完整答案详解一套
- 黑龙江公安警官职业学院《英语口语》2025 学年第二学期期末试卷
- c语言课程设计纸牌代码
- 2025河南信阳艺术职业学院招才引智招聘专业技术人员32人备考核心题库及答案解析
- c语言课程设计大数阶乘
- 2025湖北武汉人才招聘工作人员-派往武汉商学院工作1人笔试重点题库及答案解析
- 2025年扬州市江都妇幼保健院公开招聘编外合同制专业技术人员备考题库及参考答案详解
- 储备林项目环境影响评估报告
- 2025至2030年中国裂隙灯显微镜行业市场调查研究及未来趋势预测报告
- 2025春季学期国开电大本科《管理英语4》一平台机考真题及答案(第十四套)
- 协会财务支出管理制度
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读
- 广东省工程勘察设计服务成本取费导则(2024版)
- CNAS GL027-2023 化学分析实验室内部质量控制指南-控制图的应用
- 《汽车文化(第二版)》中职全套教学课件
- 生命伦理学:生命医学科技与伦理 知到智慧树网课答案
- 23秋国家开放大学《汉语基础》期末大作业(课程论文)参考答案
- 关于建立英国常任文官制度的报告
评论
0/150
提交评论