收藏 分销(赏)

C语言连接SQL数据库.doc

上传人:1587****927 文档编号:1362635 上传时间:2024-04-24 格式:DOC 页数:9 大小:47KB 下载积分:6 金币
下载 相关 举报
C语言连接SQL数据库.doc_第1页
第1页 / 共9页
C语言连接SQL数据库.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
连接到SAMPLE数据库,查询LASTNAME为JOHNSON得FIRSTNAME信息。     #include   <stdio、h>     #include   <stdlib、h>     #include   <string、h>  ﻫ  #include   "util、h"     #include   <sqlca、h>  ﻫ  EXEC   SQL   INCLUDE   SQLCA;   (1)     main()  ﻫ  {  ﻫ  EXEC   SQL   BEGIN   DECLARE   SECTION;   (2)     char   firstname[13];  ﻫ  char   userid[9];  ﻫ  char   passwd[19];     EXEC   SQL   END   DECLARE   SECTION;  ﻫ  EXEC   SQL   CONNECT   TO   sample;   (3)     EXEC   SQL   SELECT   FIRSTNME   INTO   :firstname   (4)       FROM   employee  ﻫ  WHERE   LASTNAME   =   'JOHNSON';(4)     printf(   "First   name   =   %s\n",   firstname   );     EXEC   SQL   CONNECT   RESET;   (5)  ﻫ  return   0;     }  ﻫ  上面就是一个简单得静态嵌入SQL语句得应用程序。它包括了嵌入SQL得主要部分:     (1)中得include   SQLCA语句定义并描述了SQLCA得结构。SQLCA用于应用程序与数据库之间得通讯,其中得SQLCODE返回SQL语句执行后得结果状态。  ﻫ  (2)在BEGIN   DECLARE   SECTION与END   DECLARE   SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中得数据通过SQL语句传给数据库管理器,或从数 据库管理器接收查询得结果。在SQL语句中,主变量前均有“:”标志以示区别。     (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。     (4)就是一条选择语句。它将表employee中得LASTNAME为“JOHNSON”得行数据得FIRSTNAME查出,并将它放在 firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert与delete语句。  ﻫ  (5)最后断开数据库得连接。     从上例瞧出,每条嵌入式SQL语句都用EXEC   SQL开始,表明它就是一条SQL语句。这也就是告诉预编译器在EXEC   SQL与“;”之间就是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 C语言与SQL SERVER数据库 1、使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据得添加,修改,删除,查询等操作。ﻫ step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserver  step2:打开企业管理器,建立数据库test,在test库中建立test表(a varchar(200),b varchar(200))ﻫ step3:建立系统DSN,开始菜单 ->运行 ->odbcad32,   添加->SQL SERVER  名称:csql,服务器:HNHJ  使用用户使用登录ID与密码得SQLSERVER验证,登录ID:sa,密码: ﻫ  更改默认得数据库为:testﻫ 、、、  测试数据源,测试成功,即DNS添加成功。 2、cpp文件完整代码 //##########################save、cpp########################## C代码   1. #include <stdio、h>       2. #include <string、h>       3. #include <windows、h>       4. #include <sql、h>       5. #include <sqlext、h>       6. #include <sqltypes、h>       7. #include <odbcss、h>       8.    9. SQLHENV henv = SQL_NULL_HENV;       10. SQLHDBC hdbc1 = SQL_NULL_HDBC;       11. SQLHSTMT hstmt1 = SQL_NULL_HSTMT;       12.    13. /*   14.     cpp文件功能说明:   15.     1、数据库操作中得添加,修改,删除,主要体现在SQL语句上   16.     2、采用直接执行方式与参数预编译执行方式两种   17. */   18. int main(){       19.     RETCODE retcode;       20.     UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",       21.             szUID[MAXNAME]   =   "sa",       22.             szAuthStr[MAXNAME]   =   "";      23.     //SQL语句    24.         //直接SQL语句    25.     UCHAR   sql[37] = "insert into test values('aaa','100')";    26.         //预编译SQL语句    27.     UCHAR   pre_sql[29] = "insert into test values(?,?)";    28.     //1、连接数据源    29.         //1、环境句柄    30.     retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);       31.     retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,       32.                   (SQLPOINTER)SQL_OV_ODBC3,       33.                   SQL_IS_INTEGER);       34.         //2、连接句柄      35.     retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);       36.     retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);        37.     //判断连接就是否成功    38.     if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {         39.         printf("连接失败!\n");    40.     }   else   {       41.         //2、创建并执行一条或多条SQL语句    42.         /*   43.         1、分配一个语句句柄(statement handle)   44.         2、创建SQL语句   45.         3、执行语句   46.         4、销毁语句   47.         */   48.         retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);       49.         //第一种方式    50.         //直接执行    51.         //添加操作    52.         //SQLExecDirect (hstmt1,sql,37);    53.             54.         //第二种方式    55.         //绑定参数方式    56.         char a[200]="bbb";    57.         char b[200]="200";    58.         SQLINTEGER   p   =   SQL_NTS;    59.         //1预编译    60.         SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不就是数据库列相同    61.         //2绑定参数值    62.         SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);    63.         SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);    64.         //3 执行    65.         SQLExecute(hstmt1);    66.             67.         printf("操作成功!");    68.         //释放语句句柄    69.         SQLCloseCursor (hstmt1);    70.         SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);    71.         72.     }       73.     //3、断开数据源    74.     /*   75.      1、断开与数据源得连接、   76.      2、释放连接句柄、   77.      3、释放环境句柄 (如果不再需要在这个环境中作更多连接)   78.     */   79.     SQLDisconnect(hdbc1);        80.     SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);       81.     SQLFreeHandle(SQL_HANDLE_ENV, henv);       82.     return(0);       83. }      #include <stdio、h>   #include <string、h>  #include <windows、h>    #include <sql、h> #include <sqlext、h>    #include <sqltypes、h>  #include <odbcss、h>   SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT;   /* cpp文件功能说明: 1、数据库操作中得添加,修改,删除,主要体现在SQL语句上 ﻩ2、采用直接执行方式与参数预编译执行方式两种 */ int main(){ ﻩRETCODE retcode;  ﻩUCHARﻩszDSN[SQL_MAX_DSN_LENGTH+1]   =  "csql",            szUID[MAXNAME] =  "sa",   szAuthStr[MAXNAME]  =   ""; ﻩ//SQL语句 //直接SQL语句 UCHARﻩsql[37] = "insert into test values('aaa','100')"; //预编译SQL语句 ﻩUCHARﻩpre_sql[29] = "insert into test values(?,?)"; ﻩ//1、连接数据源 ﻩ//1、环境句柄 ﻩretcode  =   SQLAllocHandle (SQL_HANDLE_ENV, NULL,   &henv); retcode  =  SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,   ﻩﻩﻩﻩ  (SQLPOINTER)SQL_OV_ODBC3, ﻩﻩﻩﻩ SQL_IS_INTEGER); ﻩﻩ//2、连接句柄 retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv,   &hdbc1);  ﻩretcode   = SQLConnect(hdbc1, szDSN,  4,  szUID, 2, szAuthStr,  0);     //判断连接就是否成功 if   ( (retcode   != SQL_SUCCESS) && (retcode !=   SQL_SUCCESS_WITH_INFO)  ) {   printf("连接失败!\n"); }  else {   //2、创建并执行一条或多条SQL语句 ﻩﻩ/* ﻩ 1、分配一个语句句柄(statement handle) ﻩ2、创建SQL语句 ﻩ 3、执行语句 ﻩﻩ4、销毁语句 ﻩﻩ*/ retcode =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1, &hstmt1);   ﻩﻩ//第一种方式 ﻩ//直接执行 ﻩﻩ//添加操作 ﻩﻩ//SQLExecDirect (hstmt1,sql,37); ﻩﻩ//第二种方式 ﻩﻩ//绑定参数方式 char a[200]="bbb"; ﻩﻩchar b[200]="200"; SQLINTEGER p = SQL_NTS; ﻩﻩ//1预编译 ﻩﻩSQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不就是数据库列相同 ﻩﻩ//2绑定参数值 SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p); ﻩ SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p); ﻩ //3 执行 SQLExecute(hstmt1); ﻩﻩprintf("操作成功!"); ﻩ//释放语句句柄 ﻩ SQLCloseCursor (hstmt1); SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); ﻩ}  ﻩ//3、断开数据源 ﻩ/*   1、断开与数据源得连接、 ﻩ 2、释放连接句柄、  3、释放环境句柄 (如果不再需要在这个环境中作更多连接)    */ SQLDisconnect(hdbc1);   ﻩSQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv);   ﻩreturn(0); }    //##########################list、cpp########################## C代码   1. #include <stdio、h>       2. #include <string、h>       3. #include <windows、h>       4. #include <sql、h>       5. #include <sqlext、h>       6. #include <sqltypes、h>       7. #include <odbcss、h>       8.    9. SQLHENV henv = SQL_NULL_HENV;       10. SQLHDBC hdbc1 = SQL_NULL_HDBC;       11. SQLHSTMT hstmt1 = SQL_NULL_HSTMT;       12.    13. /*   14.     查询SQLSERVER数据库,1、条件查询,2、直接查询全部   15. */   16. int main(){       17.     RETCODE retcode;       18.     UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",       19.             szUID[MAXNAME]   =   "sa",       20.             szAuthStr[MAXNAME]   =   "";      21.     UCHAR   sql1[39] = "select b from test where a = 'aaa'";    22.     UCHAR   sql2[35] = "select b from test where a = ? ";    23.     UCHAR   sql3[19] = "select b from test";    24.         25.     retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);       26.     retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,       27.                   (SQLPOINTER)SQL_OV_ODBC3,       28.                   SQL_IS_INTEGER);        29.     retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);       30.     //1、连接数据源    31.     retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);        32.     if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {       33.         printf("连接失败!");    34.     }   else   {       35.         //2、创建并执行一条或多条SQL语句    36.         /*   37.         1、分配一个语句句柄(statement handle)   38.         2、创建SQL语句   39.         3、执行语句   40.         4、销毁语句   41.         */   42.         retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);       43.         //第一种方式    44.         /*   45.         //直接执行   46.         SQLExecDirect (hstmt1,sql1,39);   47.         char list[5];   48.         SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);   49.         SQLFetch(hstmt1);   50.         printf("%s\n",list);   51.         */   52.             53.         //第二种方式    54.         /*   55.         //绑定参数方式   56.         char a[200]="aaa";   57.         SQLINTEGER   p   =   SQL_NTS;   58.         //1、预编译   59.         SQLPrepare(hstmt1,sql2,35); //第三个参数与数组大小相同,而不就是数据库列相同   60.         //2、绑定参数值   61.         SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);   62.         //3、执行   63.         SQLExecute(hstmt1);   64.         char list[5];   65.         SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);   66.         SQLFetch(hstmt1);   67.         printf("%s\n",list);   68.         */   69.    70.         //第三种方式全部输出    71.         /*   72.         1、确认一个结果集就是否可用。   73.         2、将结果集得列绑定在适当得变量上。   74.         3、取得行   75.         */   76.         //3、检查结果记录(如果有得话)    77.         SQLExecDirect (hstmt1,sql3,19);    78.         char list[5];    79.         SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);    80.         do{    81.             retcode = SQLFetch(hstmt1);    82.             if(retcode == SQL_NO_DATA){    83.                 break;    84.             }    85.             printf("%s\n",list);    86.         }while(1);    87.             88.         //释放语句句柄    89.         SQLCloseCursor (hstmt1);    90.         SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);    91.         92.     }       93.      94.     //4、断开数据源    95.     /*   96.      1、断开与数据源得连接、   97.      2、释放连接句柄、   98.      3、释放环境句柄 (如果不再需要在这个环境中作更多连接)   99.     */   100.     SQLDisconnect(hdbc1);        101.     SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);       102.     SQLFreeHandle(SQL_HANDLE_ENV, henv);       103.     return(0);       104. }  创建数据源得过程代码: #include<stdlib、h> #inlcude<stdio、h>ﻫ#include<windows、h>ﻫ#include<sql、h>ﻫ#include<sqlext、h>ﻫ#include<Sqltypes、h> #define SNO_LEN 30ﻫ#define NAME_LEN 50 #define DEPART_LEN 100ﻫ#define SSEX_LEN 5 int main()ﻫ{ﻫ /*Step 1 定义句柄与变量 */  //以king开头得表示得就是连接KingbaseES得变量ﻫ //以server开头得表示得就是连接SQLSERVER得变量ﻫSQLHENV    kinghenv,serverhenv; SQLHDBC    kinghdbc,serverhdbc; SQLHSTMT   kinghstmt,serverhstmt;ﻫSQLRETURN  ret;ﻫSQLCHAR    sName[NAME_LEN],sDepart[DEPART_LEN],ﻫ           sSex[SSEX_LEN],sSno[SNO_LEN]; SQLINTEGER sAge;ﻫSQLINTEGRR cbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,ﻫ           cbName=SQL_NTS,cbDepart=SQL_NTS;ﻫ /*Step 2 初始化环境*/ ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&kinghenv);ﻫret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&setverhenv);ﻫret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);ﻫret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);  /*Step 3 建立连接*/ﻫret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&kinghdbc); ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);ﻫret=SQLConnect(kinghdbc,"KingbaseES ODBC",SQL_NTS,"SYSTEM",ﻫ               SQL_NTS,"MANAGER",SQL_NTS);ﻫif(!SQL_SUCCEEDED(ret))   return -1;  //连接失败时返回错误值; ret=SQLConnect(serverhdbc,"SQLServer",SQL_NTS,"sa",ﻫ               SQL_NTS,"sa",SQL_NTS);ﻫif(!SQL_SUCCEEDED(ret))   return -1;  //连接失败时返回错误值;ﻫ /*Step 4 初始化语句句柄*/ﻫret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&kinghstmt); ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE(SQLPOINTER)                   SQL_BIND_BY_COLUMN,SQL_IS_INTEGER); ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);ﻫ /*Step 5 两种方式执行语句*/  /*预编译带有参数得语句*/ﻫret=SQLPrepare(sercerhstmt,"INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)ﻫ               VALUES(?,?,?,?,?)",SQL_NTS); if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)ﻫ{ﻫ ret=SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ                      SQL_CHAR,SNO_LEN,0,sSno,0,&cbSNO);ﻫ ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ                      SQL_CHAR,SNAME_LEN,0,sName,0,&cbName);  ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ                      SQL_CHAR,2,0,sSex,0,&cbSex);ﻫ ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,ﻫ                      SQL_INTEGER,0,0,&sAge,0,&cbAge);ﻫ ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,ﻫ                      SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbDepart);ﻫ}ﻫ /*执行SQL语句*/ﻫret=SQLExecDirect(kinghstmt,"SELECT * FROM STUDENT",SQL_NTS); if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)ﻫ{  ret=SQLBindCol(kinghstmt,1,SQL_C_CHAR,sSno,SNO_LEN,&cbSno);  ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,&cbName);ﻫ ret=SQLBindCol(kinghstmt,3,SQL_C_CHAR,sSex,SSEX_LEN,&cbSex);  ret=SQLBindCol(kinghstmt,4,SQL_C_LONG,&sAge,0,&cbAge);ﻫ ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,&cbDepart);ﻫ}ﻫ /*Step 6 处理结果集并执行预编译后得语句*/ﻫwhile((ret=SQLFetch(kinghstmt))!=SQL_NO_DATA_FOUND)ﻫ{  if(ret==SQL_ERROR) printf("Fetch error\n");ﻫ else ret=SQLExecute(serverhstmt);ﻫ}  /*Step 7 中止处理*/ﻫSQLFreeHandle(SQL_HANDLE_STMT,kinghstmt); SQLDisconnect(kinghdbc); SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc);ﻫSQLFreeHandle(SQL_HANDLE_ENV,kinghenv); SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt); SQLDisconnect(serverhdbc); SQLFreeHanlde(SQL_HANDLE_DBC<serverhdbc);ﻫSQLFreeHanlde(SQL_HANDLE_ENV,serverhenv); return 0; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服