c与sql server

以下上网上找到的C操作sqlserver的代码,需要仔细研究一下

 

 

#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;  

/*
    查询SQLSERVER数据库,1.条件查询,2.直接查询全部
*/
int main(){  
    RETCODE retcode;  
    UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",  
            szUID[MAXNAME]   =   "sa",  
            szAuthStr[MAXNAME]   =   ""; 
    UCHAR    sql1[39] = "select b from test where a = 'aaa'";
    UCHAR    sql2[35] = "select b from test where a = ? ";
    UCHAR    sql3[19] = "select b from test";
   
    retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);  
    retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,  
                  (SQLPOINTER)SQL_OV_ODBC3,  
                  SQL_IS_INTEGER);   
    retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);  
    //1.连接数据源
    retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);   
    if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {  
        printf("连接失败!");
    }   else   {  
        //2.创建并执行一条或多条SQL语句
        /*
        1.分配一个语句句柄(statement handle)
        2.创建SQL语句
        3.执行语句
        4.销毁语句
        */
        retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);  
        //第一种方式
        /*
        //直接执行
        SQLExecDirect (hstmt1,sql1,39);
        char list[5];
        SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
        SQLFetch(hstmt1);
        printf("%s/n",list);
        */
       
        //第二种方式
        /*
        //绑定参数方式
        char a[200]="aaa";
        SQLINTEGER   p   =   SQL_NTS;
        //1.预编译
        SQLPrepare(hstmt1,sql2,35); //第三个参数与数组大小相同,而不是数据库列相同
        //2.绑定参数值
        SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);
        //3.执行
        SQLExecute(hstmt1);
        char list[5];
        SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
        SQLFetch(hstmt1);
        printf("%s/n",list);
        */

        //第三种方式全部输出
        /*
        1.确认一个结果集是否可用。
        2.将结果集的列绑定在适当的变量上。
        3.取得行
        */
        //3.检查结果记录(如果有的话)
        SQLExecDirect (hstmt1,sql3,19);
        char list[5];
        SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
        do{
            retcode = SQLFetch(hstmt1);
            if(retcode == SQL_NO_DATA){
                break;
            }
            printf("%s/n",list);
        }while(1);
       
        //释放语句句柄
        SQLCloseCursor (hstmt1);
        SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);
   
    }  
 
    //4.断开数据源
    /*
     1.断开与数据源的连接.
     2.释放连接句柄.
     3.释放环境句柄 (如果不再需要在这个环境中作更多连接)
    */
    SQLDisconnect(hdbc1);   
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);  
    SQLFreeHandle(SQL_HANDLE_ENV, henv);  
    return(0);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值