通过本篇的认证阅读,你可以了解数据库的基本工作模式,程序对数据库操作的基本模型
一,什么是数据库?

数据库通俗的理解就是存放数据的地方,不同的程序可以向数据库中插入删除查询数据。
其中包含很多表,这些表的表列由开发者设计,在对数据库进行操作时主要就是进行:
插入一行数据,删除一行数据,更新一行数据
比如在word文档里
我们定义一个表头
当我们进行插入操作时:

插入ID为1001的数据,且姓名为张三,学号为1712563
在数据库中也同理但是与word不同的是:
进行插入数据时必须插入一行数据
删除时也必须删除一行数据
更新时也是对一行数据进行更新
当进行插入删除操作时,我们知道进行插入删除操作,但是我们怎么给数据库发送这个命令呢?
这时候就用到了sql查询语言
二,sql查询语言
这里以sqlserver为例:


在图中,我的电脑上的sqlserver中,共有三个数据库,分别为:
chengyangkj,FashAndBearPow,Students,三个数据库,
数据库由不同表组成。
在Students数据库下,有两个表,分别为Information表,这里面存放学生的信息,
Math表,存放学生数学成绩表。
让我们来看Information表:

他的表头我们设计为:ID,Name,Math,English,Chinese,Img
其中Img列可以为空,其他不可以为空
怎么使用sql语言进行插入操作呢?
1,查询数据
点击新建查询:


写下如下sql语言:

select * from Information 

*代表所有,这句查询语言也非常容易理解:
select(选出)*(所有的) from(从 )Information(information表)
执行效果:


可以看出查询出了所有数据
那么怎么查询特定数据呢?

select * from Information where Name='zhangshan'


此时查询到了Name为zhangshan的行数据
接下来把*改为ID:

select ID from Information where Name='zhangshan'


这时候就在Name等于zhangshan的行,查询出ID号,非常简单易懂
2,插入数据
执行下面查询语句:

insert  into Information (ID,Name,Math,English,Chinese) values (1006,'test',36,60,80)

也非常容易理解,

查看表中的数据:

select * from Information

发现已经多了一条数据

这只是一些基本的sql语句,还有更多复杂的语句,可以在下面链接学习:
http://www.w3school.com.cn/sql/index.asp
三,数据库操作模型
上面我们那样操作可以看得出效率非常低下,在实际操作中可以使用不同编程语言,去执行sql语言,操作数据库:
在c++中使用ODBC操作数据库,即ODBC相当于桥梁,搭建数据库与c++语言之间的关系:

四,配置ODBC
①、在控制面板找到“管理工具”——“数据源(ODBC)”。如图:

②、在“ODBC数据库管理器”窗口中,选择“用户DSN”,点击“添加”按钮,选择“SQL Server”,这是会出现创建SQL Server的新数据源的对话框,以“IEC”为名建立名称,选择SQL登陆的服务器:“SQLSERVER”,再点击下一步,选择登陆方式:“使用用户输入登陆ID和密码的SQL Server验证”,,用户名:sa, 密码:12345678。点击“下一步”。


记好这个创建的名称IEC
③、选择数据库“StudentDB”,然后点“下一步”、“完成”,再点“测试数据源”。最后显示测试成功。


第二步:建立数据库的表和添加数据。

五,c++配置链接数据库

#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h> 

下面是SQl操作一些常用的操作:

SQLINTEGER   定义一个整型变量,相当于C语言中的int。
SQLCHAR      定义一个字符变量,相当于C语言中的char。
ret=SQLConnect(hdbc,(SQLCHAR*)"IEC",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"12345678",SQL_NTS);//连接数据库,IEC是刚才建立的odbc的数据源,sa是用户名,12345678是密码。

具体代码如下:

#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>
#include<string.h>
#define MAXSTRSIZE 1024SQLINTEGER age;   //定义一个整型的数据库操作变量age
SQLCHAR xh[12],xm[20],sex[4],dept[50];    //定义char类型得三个数值
SQLINTEGER len_xh,len_xm,len_sex,len_age,len_dept; //定义5个nt型变量
void fuzhi()    //自定义函数
{int i;SQLRETURN ret;      //定义一个sqlreturn型的变量ret,用来接收执行sql查询语句返回的数据SQLHENV henv;//SQLHANDLE henv   定义SQLHEnv变量  固定语句,不要问为什么 记好SQLHDBC hdbc;//SQLHANDLE hdbc 固定语句,不要问为什么 记好SQLHSTMT hstmt;//SQLHANDLE hstmt 固定语句,不要问为什么 记好ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄 固定语句,不要问为什么 记好ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);//设置环境属性 固定用法 不要问为什么ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄
ret=SQLConnect(hdbc,(SQLCHAR*)"IEC",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"12345678",SQL_NTS);//连接数据库 第一个IEC为创建的ODBC名称 第三个为用户名 第五个填入密码
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){ ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄
//当数据库连接正常时 申请SQL语句句柄,为后期执行sql查询做准备SQLCHAR sql[]="SELECT * FROM Student";   //写一个查询语句 存入字符数组内ret=SQLExecDirect(hstmt,sql,SQL_NTS);//直接执行SQL语句 并且将返回值存入ret中 ret中存储是否查询成功的信息  hstmt中存储查询到的数据if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){   //判断ret的返回内容是否正确,正确表示查询成功,进入if语句i=0;       while(SQLFetch(hstmt)!=SQL_NO_DATA){//遍历结果集   对hstmt的数据进行遍历/*************************数据库整型赋值***************/SQLGetData(hstmt,1,SQL_C_CHAR,xh,12,&len_xh);/*****************************************************/SQLGetData(hstmt,2,SQL_C_CHAR,xm,20,&len_xm);SQLGetData(hstmt,3,SQL_C_CHAR,sex,4,&len_sex);SQLGetData(hstmt,4,SQL_C_ULONG,&age,0,&len_age);SQLGetData(hstmt,5,SQL_C_CHAR,dept,50,&len_dept);printf("%s %s %s %d %s\n",xh,xm,sex,age,dept);}
SQLSMALLINT num_column;   //定义短整型变量ret=SQLNumResultCols(hstmt,&num_column);//查询结果集列数 并将查询到的列数数据数存入 num_column变量中if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO) printf("结果集共有%d列。\n",num_column); else printf("查询结果集列数失败!\n"); SQLINTEGER num_row;     //整型变量 ret=SQLRowCount(hstmt,&num_row);//查询被影响的行数 if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO) printf("结果集共有%d行记录。\n",num_row); else printf("查询结果集记录个数失败!\n"); SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放语句句柄 }else printf("查询数据库操作失败!\n"); SQLDisconnect(hdbc);//断开与数据库的连接 } else printf("连接数据库失败!\n");    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄 SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
}
int main(){   //主函数,在主函数中调用上面的函数fuzhi();return 0;
}

结果如下


基本的功能就在上面了,其中有很多都是固定的用法,也不要问为什么,因为这是人为规定的,开始学习可能会感觉生疏,多多练习,
上面的功能主要就是查询数据库中的数据,及获得结果集的行数和列数

c++的ODBC数据库模型讲解相关推荐

  1. Access入库检验系统功能分析(本件确认、本批确认)

    约定:SAP中称材料为"物料" 入库检验系统称材料为"材料"实际上上述二者是同一个东西,用同样的编码进行标识,编码来自于PLM. 约定结束. 入库者 在工作地点 ...

  2. 大型分布式redis+solr+Linux+nginx+springmvc+mybatis电商项目-任亮-专题视频课程

    大型分布式redis+solr+Linux+nginx+springmvc+mybatis电商项目-45845人已学习 课程介绍         中国移动省级网上商城项目,用于建立网上终端.营销案和号 ...

  3. 使用具体的例子来讲解如何使用Esper

    这篇文章使用了一个通俗的具体的例子来讲解Esper.在文末有两个版本的代码链接.通过这篇文章,你将会了解如何使用Esper,了解如何集成Esper到Spring框架中,了解如何使用Apache Act ...

  4. ADO,OLEDB,ODBC,DAO的区别

    ADO NET OLEDB ODBC连接数据库的区别 http://www.doc88.com/p-976312043296.html http://blog.csdn.net/ithomer/art ...

  5. oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法

    <详细讲解Oracle数据库的数据迁移方法>由会员分享,可在线阅读,更多相关<详细讲解Oracle数据库的数据迁移方法(4页珍藏版)>请在人人文库网上搜索. 1.详细讲解 Or ...

  6. java 博客系统_讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

  7. ODBC / OLEDB___DAO / RDO / ADO

    ODBC / OLEDB___DAO / RDO / ADO ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open ...

  8. Django 博客教程(三):创建应用和编写数据库模型

    创建 django 博客应用 在上一章节中我们创建了 django 博客的工程,并且成功地运行了它.然而这一切都是 django 为我们创建的项目初始内容,django 不可能为我们初始化生成我们需要 ...

  9. 怎么会Sql serverW数据库模型图转化成ord于--您还可以查看属性信息字段

    1. 于Sql server数据库,创建数据库模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打开 ...

最新文章

  1. 如何成为一名成功的 iOS 程序员?
  2. K3s初探:Rancher架构师带你尝鲜史上最轻量Kubernetes发行版
  3. 如何利用弹幕,打造出非凡的观看体验
  4. 四十一、ETL工具kettle输出步骤
  5. ElasticSearch 性能优化实战,让你的 ES 飞起来!
  6. 基于区域的OSPF简单口令认证(cisco packet tracer5.3)
  7. 复数可以阐释的如此优雅
  8. emmet语法 1127
  9. html5 字符串对象,JavaScript核心对象-String对象
  10. 2016可信云大会进入倒计时 顶级“参会攻略”强势来袭
  11. 实现简单render函数
  12. List 去除重复数据的 5 种正确姿势!
  13. matlab怎么根据公式建立三维模型,紧急!求助!用matlab建立三维copula模型,正用极大似然估计方法求copula函数参数...
  14. 转-----EasyCHM制作教程
  15. 随机抽奖 php,php随机抽奖
  16. 程序员编程中遇到的那些灵异事件,胆小误入!
  17. 【二次元的CSS】—— 用 DIV + CSS3 画咸蛋超人(详解步骤)
  18. 制作古装人物彩色工笔画图片的PS教程
  19. 离散数学复习:命题逻辑的推理理论
  20. 徽章插件_为您的未来项目免费徽章PSD和矢量集

热门文章

  1. linux卸载suger,CentOS 5.8安装SugarCRM 6.5版本
  2. 舍瓦处子球难破河畔宿命 切尔西惨遭逆转1-2米堡
  3. 德玛西亚之WorkFlow(七)流程的发布与定义
  4. NNI启动失败, 提示ERROR: Restful server start failed 解决方案
  5. php获取谷歌地图gps定位,谷歌地图 API 开发之获取当前坐标(经纬度)
  6. 无处 不在的无线智能——6g 的关键驱动与研究挑战_【机器人频道|5G+】再谈6G...
  7. ffmpeg原生绘制视频
  8. Pytorch-conda-win版本安装详细教程及相关问题解决
  9. Android开发工具类文档地址
  10. Android 9.0 10.0 锁屏滑动滑动解锁不灵