ADO(ActiveX Data Object)是Microsoft数据库应用程式研发的新接口,是建立在OLE DB之上的高层数据库访问技术,不但简单易用,并且不失灵活性.不失为C 利用数据库快速研发的不错选择。
理论就不用我在这儿费话了,网上有很多,但光是理论,也不是不够的,ADO访问数据的方法很灵活,容易让人混淆.网上大部分的实例都是基于MFC的,数据库也是ACCESS多,这儿我写了一个C 语言访问MS SQL2000的实例,希望对比我还菜鸟的菜鸟有所帮助。
二、建库
首先在SQL2000企业管理中,建立一个数据库student,并创建一个表stu_info字段和值如下:
| snum | sname | sage | ssex | smajor |
| 200113801 | 本拉登 | 23 | 男 | 电脑科学 |
| 200104205 | 张巧巧 | 25 | 女 | 旅游管理 |
| 200113802 | 张学友 | 26 | 男 | 电脑科学 |
三、访问
程式清单如下:(win2000 VC6.0)
| /******************************************************************* 利用ADO访问MS SQL2000 需要: 【1】输出stu_info表内的每一条记录 【2】添加一条新记录 【3】删除名字为"本拉登"的记录 */ #import "c:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "EndOfFile") #include <iostream> #include <iomanip> //for setw() using namespace std; class STU { public: char snum[10]; //学号 char sname[10]; //姓名 char ssex[2]; //姓别 long sage; //年龄 char smajor[20]; //专业 public: STU(){} ~STU(){} }; int main() { STU student; ::CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备 _RecordsetPtr m_pRecordset("ADODB.Recordset"); _ConnectionPtr m_pConnection("ADODB.Connection"); _bstr_t bstrSQL("select * from stu_info"); //查询语句 char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'"; try { // 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); // 配置连接字符串,必须是BSTR型或_bstr_t类型 _bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;"; //若数据库在网络上则Server为形如(192.168.1.5,3340) //用户sa和密码123只是针对我的库 m_pConnection->Open(strConnect,"","",adModeUnknown); if(m_pConnection==NULL) cerr<<"Lind data ERROR!\n"; // 创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); // 取得表中的记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText); _variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中的snum,sname,sage,ssex,smajor cout << "学号 姓名 年龄 姓别 专业"; cout << "\n----------------------------------------------------------------\n"; while (!m_pRecordset->EndOfFile) { vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都能够 vsname = m_pRecordset->GetCollect("sname"); vsage = m_pRecordset->GetCollect("sage"); vssex = m_pRecordset->GetCollect("ssex"); vsmajor = m_pRecordset->GetCollect("smajor"); if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL && vssex.vt != VT_NULL && vsmajor.vt != VT_NULL) { cout.setf(ios::left); cout << setw(14) << (char*)(_bstr_t)vsnum; cout << setw(14) << (char*)(_bstr_t)vsname; cout << setw(8) << vsage.lVal; cout << setw(8) << (char*)(_bstr_t)vssex; cout <<setw(20) << (char*)(_bstr_t)vsmajor; cout.unsetf(ios::left); cout << endl; } m_pRecordset->MoveNext(); ///移到下一条记录 } cout << "\n----------------------------------------------------------------\n"; cout << "\n请输入您要添加的学生信息\n"; cout << "学号:"; cin >> student.snum; cout << "\n姓名:"; cin >> student.sname; cout << "\n年龄:"; cin >> student.sage; cout << "\n姓别:"; cin >> student.ssex; cout << "\n专业:"; cin >> student.smajor; m_pRecordset->MoveFirst(); //移动到第一条记录 m_pRecordset->AddNew(); ///添加新记录 m_pRecordset->PutCollect("snum",_variant_t(student.snum)); m_pRecordset->PutCollect("sname",_variant_t(student.sname)); m_pRecordset->PutCollect("sage",_variant_t(student.sage)); m_pRecordset->PutCollect("ssex",_variant_t(student.ssex)); m_pRecordset->PutCollect("smajor",_variant_t(student.smajor)); m_pRecordset->Update(); m_pConnection->Execute(query_cmd,NULL,1); //用Execute执行sql语句来删除 m_pRecordset->Close(); // 关闭记录集 }
文章整理:西部数码--专业提供域名注册、虚拟主机服务 相关文章
热点关注
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源 网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧 行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒 网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer 网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash 程序设计 Java技术 C/C++ VB delphi 网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术 操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD |




