博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言+ODBC+SQL 操作(向SQL里面添加数据)
阅读量:4646 次
发布时间:2019-06-09

本文共 3311 字,大约阅读时间需要 11 分钟。

为了节省时间,我就引用上一节的数据库的表和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 (?,?,?,?,?,?,?,?,?,?);";  这个语句中的’?’表示要添加的数据。(添加多少个数据,就写多少个问号)

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

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

 

转载于:https://www.cnblogs.com/beta-data/p/4474061.html

你可能感兴趣的文章
实验5
查看>>
git 下载 安装
查看>>
录制终端信息并回放
查看>>
JS中window.event事件使用详解
查看>>
ES6深入学习记录(一)class方法相关
查看>>
《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
查看>>
C语言对mysql数据库的操作
查看>>
SQL Server 数据库备份
查看>>
INNO SETUP 获得命令行参数
查看>>
Charles抓取https请求
查看>>
LAMP环境搭建
查看>>
C语言的变量的内存分配
查看>>
clientcontainerThrift Types
查看>>
链接全局变量再说BSS段的清理
查看>>
hdu 1728 逃离迷宫
查看>>
HTML5与CSS3权威指南之CSS3学习记录
查看>>
docker安装部署
查看>>
AVL树、splay树(伸展树)和红黑树比较
查看>>
多媒体音量条显示异常跳动
查看>>
运算符及题目(2017.1.8)
查看>>