当前位置: 首页 > 编程日记 > 正文

使用纯C++实现SQL Server2005 数据库读写操作详细步骤

环境:虚拟机windows xpvs2008 + SQLServer 2005 Express

数据库访问技术采用ADO

需要安装的软件包括:microsoft_dotnetfxchs2.0.exeWindowsInstaller-KB893803-v2-x86.exeSQLEXPR32_CHS.EXESQLServer2005_SSMSEE.msiSQLServer2005SP3-KB955706-x86-CHS.exe

数据库的一些属性配置及注意事项见后面参考文献。

初始数据库表的建立及代码参考http://www.yesky.com/277/1893277.shtml

 

#include"stdafx.h"

#include<iostream>

#include<iomanip>//for setw()

#include"windows.h"

 

usingnamespace std;

 

//导入ADO相关类说明,路径名可以根据自己系统安装的ADO支持文件的路径来自行设定

//#improt语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件)

//语句no_namespace说明ADO对象不使用命名空间,rename("EOF", "EndOfFile")说明将ADO中结束标志EOF改为EndOfFile,以避免和其它库中命名相冲突

#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")

 

classSTU

{

public:

    charsnum[10];

    charsname[10];

    charssex[2];

    longsage;

    charsmajor[20];

public:

    STU(){}

    ~STU(){}

};

 

int _tmain(int argc,_TCHAR* argv[])

{

    STUstudent;

 

    ::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备

 

    //_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作

    _RecordsetPtr m_pRecordset("ADODB.Recordset");//定义记录集对象

 

    //_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句

    _ConnectionPtr m_pConnection("ADODB.Connection");//定义数据库连接对象

 

    _bstr_tbstrSQL("select *from stu_info");//查询语句

 

    char*query_cmd = "DELETEFROM stu_info WHERE sname = '本拉登'";

 

    try

    {  

        m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象

 

        //设置连接字符串,必须是BSTR型或者_bstr_t类型,若数据库在网络上则Server为形如(192.168.1.5,3340) 

        _bstr_t strConnect = "Provider=SQLOLEDB; Server=.\\sqlexpress;Database=student; uid=sa; pwd=123456;";

       

        m_pConnection->Open(strConnect,"","",adModeUnknown);//NULL、adConnectUnspecified、//建立与服务器连接

 

        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();//关闭记录集

    }

    catch (_com_errore)//捕捉异常

    {

        cerr<<"\nERROR:"<<(char*)e.Description();//抛出异常

    }

   

    if (m_pConnection->State)

    {

        m_pConnection->Close();

    }

 

    ::CoUninitialize();

 

    return 0;

}

参考文献:

1、 http://wenku.baidu.com/view/f1ff0c1d964bcf84b9d57bbd.html

2、 http://www.yesky.com/277/1893277.shtml

3、 http://blog.csdn.net/hqw7286/article/details/5441000

4、 http://blogger.org.cn/blog/more.asp?name=fishyqd&id=13038

5、 http://www.west263.com/www/info/66267-1.htm

6、 http://www.cnblogs.com/Chinaluis/archive/2008/10/06/1304634.html

7、 http://zhidao.baidu.com/question/98140032.html

8、 http://blog.csdn.net/qingshansima/article/details/4059167

相关文章:

硬核吃瓜!上万条数据撕开微博热搜真相

作者 | 徐麟来源 | 转载自数据森麟&#xff08;ID:shujusenlin&#xff09;吃瓜前言关于新浪微博&#xff0c;向来都是各路吃瓜群众聚集之地&#xff0c;大家在微博中可以尽情吃瓜&#xff0c;各种类型的瓜应有尽有&#xff0c;只有你想不到的&#xff0c;没有你吃不到的。微博…

python类的__slots__属性、__del__属性、上下文(__enter__和__exit__)、

常规情况下&#xff0c;类的属性字典是共享的&#xff0c;而实例的字典是独立的。如果一个类的属性较少&#xff0c;但是拥有很多的实例&#xff0c;这些实例的属性字典会占用较多的内存空间。对这样的类来说&#xff0c;为了节省内存空间&#xff0c;可以使用__slots__类变量代…

普通帧,关键帧,空白关键帧的区别

1. 特点 帧——是进行flash动画制作的最基本的单位&#xff0c;每一个精彩的flash动画都是由很多个精心雕琢的帧构成的&#xff0c;在时间轴上的每一帧都可以包含需要显示的所有内容&#xff0c;包括图形、声音、各种素材和其他多种对象。 关键帧——顾名思义&#xff0c;有关键…

Spark入门系列(二)| 1小时学会RDD编程

作者 | 梁云1991转载自Python与算法之美&#xff08;ID:Python_Ai_Road&#xff09;导读&#xff1a;本文为 Spark入门系列的第二篇文章&#xff0c;主要介绍 RDD 编程&#xff0c;实操性较强&#xff0c;感兴趣的同学可以动手实现一下。RDD 是弹性分布式数据集(Resilient Dist…

Office2010启动慢的解决方法

以word2010为例&#xff1a; 解决启动慢的问题&#xff1a; 转自&#xff1a;http://www.blue1000.com/bkhtml/2011-12/70698.htm 首先启动Word2010&#xff0c;-->单击进入“文件”选项卡-->选择左边的“选项”按钮-->弹出“word选项”对话框窗口&#xff0c;-->…

如何在 Vue 项目中使用 echarts

数据的重要性我们大家都知道&#xff0c;就算再小的项目中都可能使用几个图表展示&#xff0c;我最近在做项目的过程中也是需要用到图表&#xff0c;最后选择了echarts 图表库&#xff0c;为什么选择 echarts&#xff0c;第一&#xff1a;简单上手容易&#xff0c;第二&#xf…

OpenCV实现在图像中写入汉字

由于OpenCV自带的cvInitFont和cvPutText函数不支持向图像中写入中文&#xff0c;参考http://www.opencv.org.cn/forum/viewtopic.php?t2083 中的方法&#xff0c;在windows7 64位机上用vs2008OpenCV2.3.1实现具体步骤如下&#xff1a; 1、新建一个控制台工程Test&#xff0c;先…

Operations Manager 2012 SP1配置部署系列之(二) SCOM监控SCVMM

你可以使用Operations Mangager连接到VMM上去监控VMM管理的虚拟机和虚拟机的主机的健康和可用性.你还可以监视VMM管理服务器的健康和可用性&#xff0c;VMM数据库服务器、存储库服务器&#xff0c;和矢量调制法的自服务门户web服务器.当你把VMM与Operations Mangager集成、VMM的…

ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系

前面已经介绍了如何使用URDF建造机器人小车并显示在Rviz的仿真环境里面&#xff0c;但是小车是静止的。下面介绍如何让它在Rviz里面动起来&#xff0c;并理清URDF,TF 和 odom 的关系。 1. ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系 一般在urdf文件…

谷歌新研究:基于数据共享的神经网络快速训练方法

作者 | Google Brain译者 | 凯隐责编 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;神经网络技术的普及离不开硬件技术的发展&#xff0c;GPU 和 TPU 等硬件型训练加速器带来的高算力极大的缩短了训练模型需要的时间&#xff0c;使得研究者们…

制作一个简单的linux

我这里是借助宿主机做的一个简单的Linux&#xff0c;我们只要知道一个Linux启动过程需要什么&#xff0c;这里制作就简单的多了。不过没有基础的也没关系&#xff0c;我写的很详细&#xff0c;没有基础的看了我写的步骤只要细心也是会做出来的&#xff0c;我这里的小Linux是很简…

nginx是什么,如何使用

一&#xff1a;nginx是什么&#xff1f; 二&#xff1a;nginx作为网关&#xff0c;需要具备什么&#xff1f;&#xff08;nginx可以作为web服务器&#xff0c;但更多的时候&#xff0c;我们把它作为网关&#xff0c;因为它具备网关必备的功能&#xff1a;&#xff09; 反向代理…

OpenCV中Mat数据结构使用举例

#include "stdafx.h"#include <string>#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int _tmain(int argc, _TCHAR* argv[]){//创建一个用13j填充的 7 x 7 复矩阵-----1Mat M(7, 7, CV_32FC2, Scalar…

贾扬清加盟AI开发者大会!早鸟票抢购正式开启

整理 | 夕颜硬核 AI 技术大会&#xff0c;一年参加一次就够了。9 月 6日-7 日&#xff0c;2019 AI 开发者大会&#xff08;AI ProCon&#xff09;将在北京富力万丽酒店举行&#xff0c;人工领域技术领袖将再次齐聚一堂&#xff0c;探讨过去一年最新的 AI 技术趋势与变化&#x…

基本控件HyperlinkButton控件

HyperlinkButton控件可用来作为超链接按钮&#xff0c;支持页面导航。 若导航到MainPage.xaml&#xff0c;NavigateUri属性指定单击后导航页面的Uri 若导航到网页&#xff0c;必须同时指定TargetName&#xff0c;否则要报错。 <HyperlinkButton Width"200" Heigh…

江湖又现中科大少年班的传说

作者 | ——&#xff0c;夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;《日本经济新闻》的一则报道指出&#xff1a;在左右着企业、国家和地区发展的人工智能领域&#xff0c;中科大少年班的人才支撑着中国的发展。中国自动驾…

[JOISC2014]バス通学

[JOISC2014]バス通学 题目大意&#xff1a; 有\(n(n\le10^5)\)个点和\(m(m\le3\times10^5)\)条交通线路。第\(i\)条交通线路可以让你在时间\(x_i\)从\(a_i\)出发&#xff0c;并在\(y_i\)时到达\(b_i\)。\(q(q\le10^5)\)次询问&#xff0c;每次询问若要在时间\(l_i\)到达\(n\)点…

Windows7在Notepad++中配置Python+OpenCV

1、 从http://notepad-plus-plus.org/下载最新的Notepad6.2.1安装&#xff1b; 2、 从http://www.python.org/下载python-2.7.3.msi安装到D:\Python27目录下&#xff0c;并将D:\Python27添加到环境变量Path中&#xff1b; 3、 打开Notepad&#xff0c;按下F5或者运行(R…

virtualenv 在windows下的绿化方法

virtualenv 在windows下的绿化方法测试环境&#xff1a;windows 7 32 en Python 2.7.3setuptools-0.6c11.win32-py2.7virtualenv-1.9.1-with-pip-1.3.11. f:\> virtualenv my2. 编辑 my/Scripts/activate.bat 前几行中设置VIRTUAL_ENV的那条语句&#xff0c;改为set VIRTUA…

当谈论迭代器时,我谈些什么?

作者 | 樱雨楼编辑 | 豌豆花下猫转载自python猫&#xff08;ID:python_cat&#xff09;导语&#xff1a;之前说过&#xff0c;我对于编程语言跟其它学科的融合非常感兴趣&#xff0c;但我还说漏了一点&#xff0c;就是我对于 Python 跟其它编程语言的对比学习&#xff0c;也很感…

Windows7在Eclipse中配置Python+OpenCV

1. 从http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html下载jdk-7u2-windows-i586.exe&#xff0c;安装到D:\ProgramFiles\Java&#xff0c;并将D:\ProgramFiles\Java\jdk1.7.0_02\bin添加到环境变量中&#xff1b; 2. 从…

Pinterest基于AWS规模化使用Apache Kafka的实践经验

在Pinterest&#xff0c;Apache Kafka被用于为实时流应用程序传输数据、记录日志和可视化监控指标。Pinterest的Kafka托管在AWS上&#xff0c;为了实现复制和高可用性&#xff0c;其安装使用了MirrorMaker和DoctorKafka工具。 Pinterest的技术主管Yu Yang写道&#xff0c;Pinte…

Open×××以及其它IP层×××的完全链路层处理的实现

如果Open也能实现传输模式该有多好&#xff0c;如果基于Open实现的产品能仅仅作为一根昂贵的网线串接在用户网络环境&#xff0c;自动捕获感兴趣流量该有多好&#xff1b;如果它能做到只需要配置一个IP即可工作而无需配置任何路由该有多好。我们知道Open是一个用户态的程序&…

Windows 7 64位机上OpenCV2.4.3的编译、安装与配置

1. 从http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/下载OpenCV2.4.3&#xff1b; 2. 将OpenCV-2.4.3.exe放到D:\soft\OpenCV2.4.3文件夹下&#xff0c;解压到当前文件夹下&#xff0c;生成一个opencv文件夹&#xff1b; 3. 下载并安…

有望替代卷积神经网络?微软最新研究提基于关系网络的视觉建模

导语&#xff1a;最近两年&#xff0c;自注意力机制、图和关系网络等模型在NLP领域刮起了一阵旋风&#xff0c;基于这些模型的Transformer、BERT、MASS等框架已逐渐成为NLP的主流方法。这些模型在计算机视觉领域是否能同样有用呢&#xff1f;近日&#xff0c;微软亚洲研究院视觉…

Word 2013无法发布文章到博客园

2018年12月12日突然发现word2013无法发布文章到博客园了&#xff0c; 虽然不常发布博客&#xff0c; 但作为一个强迫症患者&#xff0c; 不折腾好了&#xff0c; 吃肉都不香呀&#xff01; 删除之前的账户&#xff0c; 想重新注册&#xff0c; 居然遇到了灰色对话框&#xff01…

1 sec on Large Judge (java): https://github.com/l...

1 sec on Large Judge (java): https://github.com/leoyonn/leetcode/blob/master/src/q029_substring_of_all_words/Solution.java转载于:https://www.cnblogs.com/codingtmd/archive/2013/03/31/5079017.html

性能提升3倍的树莓派4,被爆设计缺陷!

整理 | 屠敏转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;一直以来&#xff0c;素有世界最小电脑之称的 Raspberry Pi&#xff08;树莓派&#xff09;是一种独特的存在。它不仅只有一块信用卡般的体积&#xff0c;还具备主机电脑所具备的功能&#xff0c;如运行 L…

Windows7 64位机上Emgu CV2.4.2安装与配置

1. 从http://sourceforge.net/projects/emgucv/?sourcedirectory下载最新的Emgu CV2.4.2&#xff1b; 2. 将libemgucv-windows-x86-gpu-2.4.2.1777拷贝到D:\soft\Emgu2.4.2文件夹下&#xff0c;运行此.exe文件&#xff0c;将其安装到D:\soft\Emgu2.4.2\emgucv-wind…

2018年12月,华为HCNP大面积更新题目,军哥独家解题咯

2018年12月&#xff0c;华为HCNP大面积更新题目&#xff0c;乾颐堂军哥独家解题咯2018年是华为认证变动比较大的一年&#xff0c;华为认证走过这几年不得不说是有一定进步的&#xff0c;而且最近华为孟女侠确实让我也小小的骄傲了一把&#xff0c;所以当然希望华为认证能做的更…