﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天狼啸月-文章分类-数据库</title><link>http://www.cppblog.com/wuqingchenxinda/category/18401.html</link><description>天狼神族</description><language>zh-cn</language><lastBuildDate>Fri, 23 Dec 2011 02:49:34 GMT</lastBuildDate><pubDate>Fri, 23 Dec 2011 02:49:34 GMT</pubDate><ttl>60</ttl><item><title>C++访问SQL2000</title><link>http://www.cppblog.com/wuqingchenxinda/articles/162640.html</link><dc:creator>烈焰之光</dc:creator><author>烈焰之光</author><pubDate>Fri, 23 Dec 2011 00:43:00 GMT</pubDate><guid>http://www.cppblog.com/wuqingchenxinda/articles/162640.html</guid><wfw:comment>http://www.cppblog.com/wuqingchenxinda/comments/162640.html</wfw:comment><comments>http://www.cppblog.com/wuqingchenxinda/articles/162640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wuqingchenxinda/comments/commentRss/162640.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wuqingchenxinda/services/trackbacks/162640.html</trackback:ping><description><![CDATA[<p style="margin-bottom: 12pt"><strong><span style="font-family: 宋体">一、ADO简介</span></strong> <br /><br />　　ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口，是建立在OLE DB之上的高层数据库访问技术,不仅简单易用，并且不失灵活性.不失为<a href="http://c.chinaitlab.com/" target="_blank"><span style="font-size: 10.5pt">C++</a></span>利用数据库快速开发的不错选择。 <br /><br />　　理论就不用我在这儿费话了,网上有很多,但光是理论,也不是不够的,ADO访问数据的方法很灵活,容易让人混淆.网上大部分的实例都是基于MFC的,数据库也是Access多,这儿我写了一个<a href="http://c.chinaitlab.com/" target="_blank"><span style="font-size: 10.5pt">C++</a></span>语言访问MS SQL2000的实例，希望对比我还菜鸟的菜鸟有所帮助。 <br /><br />　　<strong>二、建库</strong> <br /><br />　　首先在SQL2000企业管理中，建立一个数据库student,并创建一个表stu_info字段和值如下： <br /><br />　　 <strong>三、访问</strong> <br /><br />　　程序清单如下：（win2000+VC6.0) <br /><br />　　/******************************************************************* <br />利用ADO访问MS SQL2000 <br />要求: 【1】输出stu_info表内的每一条记录 <br />【2】添加一条新记录 <br />【3】删除名字为"本拉登"的记录 <br />*/ <br />#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ <br />no_namespace rename("EOF", "EndOfFile") <br />#include ＜iostream＞ <br />#include ＜iomanip＞ //for setw() <br />using namespace std; <br />class STU <br />{ <br />　public: <br />　　char snum[10]; //学号 <br />　　char sname[10]; //姓名 <br />　　char ssex[2]; //姓别 <br />　　long sage; //年龄 <br />　　char smajor[20]; //专业 <br />　public: <br />　　STU(){} <br />　　~STU(){} <br />}; <br /><br />int main() <br />{ <br />　STU student; <br />　::CoInitialize(NULL); // 初始化OLE/COM库环境，为访问ADO接口做准备 <br /><br />　_RecordsetPtr m_pRecordset("ADODB.Recordset"); <br />　_ConnectionPtr m_pConnection("ADODB.Connection"); <br /><br />　_bstr_t bstrSQL("select * from stu_info"); //查询语句 <br />　char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'"; </p>
<p>try <br />　{ <br />　　// 创建Connection对象 <br />　　m_pConnection.CreateInstance("ADODB.Connection"); <br />　　// 设置连接字符串，必须是BSTR型或者_bstr_t类型 <br /><br />　　_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;"; <br />　　//若数据库在网络上则Server为形如(192.168.1.5,3340) <br />　　//用户sa和密码123只是针对我的库 <br />　　m_pConnection-＞Open(strConnect,"","",adModeUnknown); <br />　　if(m_pConnection==NULL) <br />　　　cerr＜＜"Lind data ERROR!\n"; <br />　　// 创建记录集对象 <br />　　m_pRecordset.CreateInstance(__uuidof(Recordset)); <br />　　// 取得表中的记录 <br />　　m_pRecordset-＞Open(bstrSQL,m_pConnection.GetInterfacePtr(), <br />　　adOpenDynamic,adLockOptimistic,adCmdText); <br /><br />　　_variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中的snum,sname,sage,ssex,smajor <br />　　cout ＜＜ "学号 姓名 年龄姓别 专业"; <br />　　cout ＜＜ "\n----------------------------------------------------------------\n"; <br /><br />　　while (!m_pRecordset-＞EndOfFile) <br />　　{ <br />　　　vsnum = m_pRecordset-＞GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都可以 <br />　　　vsname = m_pRecordset-＞GetCollect("sname"); <br />　　　vsage = m_pRecordset-＞GetCollect("sage"); <br />　　　vssex = m_pRecordset-＞GetCollect("ssex"); <br />　　　vsmajor = m_pRecordset-＞GetCollect("smajor"); <br />　　　if (vsnum.vt != VT_NULL &amp;&amp; vsname.vt != VT_NULL &amp;&amp; vsage.vt != VT_NULL&amp;&amp; vssex.vt != VT_NULL &amp;&amp; vsmajor.vt != VT_NULL) <br />　　　{ <br />　　　　cout.setf(ios::left); <br />　　　　cout ＜＜ setw(14) ＜＜ (char*)(_bstr_t)vsnum; <br />　　　　cout ＜＜ setw(14) ＜＜ (char*)(_bstr_t)vsname; <br />　　　　cout ＜＜ setw(8) ＜＜ vsage.lVal; <br />　　　　cout ＜＜ setw(8) ＜＜ (char*)(_bstr_t)vssex; <br />　　　　cout ＜＜setw(20) ＜＜ (char*)(_bstr_t)vsmajor; <br />　　　　cout.unsetf(ios::left); <br />　　　　cout ＜＜ endl; <br />　　　} <br />　　　m_pRecordset-＞MoveNext(); ///移到下一条记录 <br />　　} <br />　　cout ＜＜ "\n----------------------------------------------------------------\n"; <br />　　cout ＜＜ "\n请输入你要添加的学生信息\n"; <br />　　cout ＜＜ "学号:"; <br />　　cin ＞＞ student.snum; <br />　　cout ＜＜ "\n姓名:"; <br />　　cin ＞＞ student.sname; <br />　　cout ＜＜ "\n年龄:"; <br />　　cin ＞＞ student.sage; <br />　　cout ＜＜ "\n姓别:"; <br />　　cin ＞＞ student.ssex; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; cout ＜＜ "\n专业:";<br />&nbsp;&nbsp;&nbsp; 　　cin ＞＞ student.smajor;<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞MoveFirst(); //移动到第一条记录<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞AddNew(); ///添加新记录<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞PutCollect("snum",_variant_t(student.snum));<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞PutCollect("sname",_variant_t(student.sname));<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞PutCollect("sage",_variant_t(student.sage));<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞PutCollect("ssex",_variant_t(student.ssex));<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞PutCollect("smajor",_variant_t(student.smajor));<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞Update();</p>
<p>&nbsp;&nbsp;&nbsp; 　　m_pConnection-＞Execute(query_cmd,NULL,1); //用Execute执行sql语句来删除<br />&nbsp;&nbsp;&nbsp; 　　m_pRecordset-＞Close(); // 关闭记录集<br />&nbsp;&nbsp;&nbsp; 　}</p>
<p>&nbsp;&nbsp;&nbsp; 　// 捕捉异常<br />&nbsp;&nbsp;&nbsp; 　catch(_com_error e)<br />&nbsp;&nbsp;&nbsp; 　{　<br />&nbsp;&nbsp;&nbsp; 　　// 显示错误信息<br />&nbsp;&nbsp;&nbsp; 　　cerr ＜＜ "\nERROR:" ＜＜ (char*)e.Description();//抛出异常<br />&nbsp;&nbsp;&nbsp; 　}<br />&nbsp;&nbsp;&nbsp; 　if(m_pConnection-＞State)<br />&nbsp;&nbsp;&nbsp; 　　m_pConnection-＞Close();</p>
<p>&nbsp;&nbsp;&nbsp; 　::CoUninitialize();</p>
<p>&nbsp;&nbsp;&nbsp; 　return 0;<br />&nbsp;&nbsp;&nbsp; }</p> <img src ="http://www.cppblog.com/wuqingchenxinda/aggbug/162640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wuqingchenxinda/" target="_blank">烈焰之光</a> 2011-12-23 08:43 <a href="http://www.cppblog.com/wuqingchenxinda/articles/162640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>