为了节省时间,我就引用上一节的数据库的表和C语言的结构体数组,在结构体数组中添加数据,清空数据库数据。

第一步查询:SQLBindParameter函数的用法。

SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle, // statement句柄
SQLUSMALLINT ParameterNumber, // 参数位于语句中的序号,最小为1
SQLSMALLINT InputOutputType, // 入参/出参类型标识[1]
SQLSMALLINT ValueType, // 对应的C数据类型标识[2]
SQLSMALLINT ParameterType, // 对应的SQL数据类型标识[2]
SQLULEN ColumnSize, // 对应字段长度
SQLSMALLINT DecimalDigits, // 如果是浮点数,则对应字段精度
SQLPOINTER ParameterValuePtr, // 参数缓存
SQLLEN BufferLength, // 参数缓存字节数
SQLLEN * StrLen_or_IndPtr); // 用于表示字符串长度或NULL值的标识[3]

注意:

1、在ODBC中,整型的SQL_INTEGER类型对应的C语言数据类型标识是SQL_C_LONG,而不是SQL_C_INT,并且没有SQL_C_INT这种类型。

2、在存入整型的数据时,SQLPOINTER ParameterValuePtr  应该要加取地址符‘&’。

3、SQLUSMALLINT ParameterNumber 这个参数不能随便写,要与建表时的顺序相同。

第二步:写添加数据的函数。

void workertianjiashuju(int i)
{
SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
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*)"phonesql",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"123456",SQL_NTS);//连接数据库
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){
ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄
SQLCHAR sql[]="INSERT INTO worker VALUES (?,?,?,?,?,?,?,?,?,?);";
SQLINTEGER P = SQL_NTS;
ret=SQLPrepare(hstmt,sql,SQL_NTS);
ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&gong[i].num,0,&P);//绑定参数
ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].name,20,&P);//绑定参数
ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].sex,10,&P);//绑定参数
ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&gong[i].age,0,&P);//绑定参数
ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].shenfennum,20,&P);
ret=SQLBindParameter(hstmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].xueli,10,&P);
ret=SQLBindParameter(hstmt,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].mianmao,10,&P);
ret=SQLBindParameter(hstmt,8,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].mima,20,&P);
ret=SQLBindParameter(hstmt,9,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].quanxian,10,&P);
ret=SQLBindParameter(hstmt,10,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].born,20,&P);
ret=SQLExecute(hstmt);//直接执行SQL语句
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){ /*****************测试结构体数组********************/
printf("添加第%d条信息成功!\n",i+1); SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放语句句柄
}else printf("添加数据库操作失败!\n"); SQLDisconnect(hdbc);//断开与数据库的连接
}
else printf("连接数据库失败!\n");
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄 }

 注意:SQLCHAR sql[]="INSERT INTO worker VALUES (?,?,?,?,?,?,?,?,?,?);";  这个语句中的’?’表示要添加的数据。(添加多少个数据,就写多少个问号)

 第三步:写主函数调用,代码略。

完成后,数据库中的数据变为

												

C语言+ODBC+SQL 操作(向SQL里面添加数据)的更多相关文章

  1. SQL中CRUD C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete 删除数据

    在SQL server中对数据库的操作: 删除表:drop table 表名修改表:alter table 表名 添加列add 列名 列类型alter table 表名 drop column 列名 ...

  2. nhibernate操作sql2008数据库(添加数据失败)

    今天遇到一错误困了我一天,如此痛恨,遂记录于此: nhibernate框架+MVC模式搭的项目,添加数据时报错: "could not insert: [KXRMallManage.Mode ...

  3. java操作elasticsearch实现批量添加数据(bulk)

    java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...

  4. C语言ODBC数据库操作

    今天我们来介绍一下C语言操作数据库的方法,这里我们使用的是ODBC方式.环境是WIN7+VC6.其他环境也差不多,具体情况具体分析. 首先是环境的配置以及数据源的添加.这里就不去解释了,相关资料网上有 ...

  5. sql Server 创建临时表 嵌套循环 添加数据

    begin --通过销货单与明细,生成安装项目及明细,及判断明细是否拆分生成多条 --delete from sazxm --delete from ssbazrw --获取未生成项目的销货单号 ,) ...

  6. Springboot第五篇:结合myBatis进行SQL操作

    前提:和之前同样的,本篇会从前端和后台一起讲述关于SQL的select操作(其他操作原理大致类似,不多做解释了). 大致流程:前端通过AJAX将数据发送到后台的路由,后台路由会根据发送的数据进行SQL ...

  7. C语言+ODBC+SQL 连接

    第一步:配置ODBC. ①.在控制面板找到ODBC,或者在控制面板上搜索ODBC.如图: ②.点击ODBC的添加按钮,选择SQL Server,这是会出现创建SQL Server的新数据源的对话框,我 ...

  8. Oracle学习笔记四 SQL命令(二):SQL操作语言类别

    SQL分为下列语言类别 1.数据定义语言(DDL) Create.Alter.Drop 2.数据操纵语言(DML) Insert.Select.Delete.Update 3.事务控制语言(TCL) ...

  9. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

随机推荐

  1. HBase Endpoint

    引言   假设HBase某张表有1000个Region,里面存储着100万行数据,现在需要统计满足某些条件的行数,普通的做法是使用Filter(过滤条件),通过HBase API将满足过滤条件的行数据 ...

  2. [置顶] Android开发之ProcessState和IPCThreadState类分析

    在Android中ProcessState是客户端和服务端公共的部分,作为Binder通信的基础,ProcessState是一个singleton类,每个 进程只有一个对象,这个对象负责打开Binde ...

  3. 自定义H5页面规范

    查看详情页也可支持自定义H5页面,用来展示更多内容. 交互规范 分屏切换,支持横向和竖向,滑动指引需清晰 若详情页加载较慢,需设计loading页,给予用户友好的提示 如有视频,需在底部加上“建议在W ...

  4. HTTP meta 设置方法

    网页的缓存是由 HTTP 消息头中的 “Cache-control” 来控制的,常见的取值有 private.no-cache.max-age.must-revalidate 等,默认为private ...

  5. Robotium -- 针对apk包的测试

    在使用Robotium测试的时候,有时候,测试人员并没有代码权限,而Robotium也可以在只有apk文件进行测试,下面就介绍一下这个过程. 1.设置环境变量 安装jdk环境和sdk环境 2.安装签名 ...

  6. HDU 3791 二叉搜索树 题解

    Problem Description 推断两序列是否为同一二叉搜索树序列   Input 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接下去一行是 ...

  7. Java 异常处理的误区和经验总结--转载

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验, ...

  8. Spark Streaming与kafka整合实践之WordCount

    本次实践使用kafka console作为消息的生产者,Spark Streaming作为消息的消费者,具体实践代码如下 首先启动kafka server .\bin\windows\kafka-se ...

  9. 如何完全退出android应用程序

    当一个android应用程序包含多个activity时,要完全退出android应用程序,便要销毁掉所有的activity,下面是一种网上流传的比较经典完美的方法: 首先要定义一个继承Applicat ...

  10. 关于安装PHP补装PDO与PDO_MYSQL操作

    我这里是通过PHP源码包来安装的 1.安装pdo cd到你的PHP源码包下的ext/pdo目录,然后执行如下操作: #/usr/local/php/bin/phpize   (/usr/local/p ...