C语言与sqlserver数据库

系统 1802 0
原文: C语言与sqlserver数据库

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. }     

 

//##########################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. }    

 

3. 总结:ODBC数据库操作与JDBC步骤上类似,可以融汇贯通来学习

本文来自于 http://simpledev.javaeye.com/blog/339537

C语言与sqlserver数据库


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论