C语言与SQL SERVER数据库

时间:2022-07-14 13:39:36

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代码 C语言与SQL SERVER数据库
  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. }