在VS下用C语言连接SQLServer2008
step1:启动SQLSERVER服务 step2:打建立数据库test,在test库中建立test表(a varchar(200),b varchar(200)) ------------------------------------------------------------------- #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(){? ? ?? ?char a[200]="bbb"; ?? ?char b[200]="200"; ?? ?SQLINTEGER?? p; ?? ?RETCODE retcode;? ? ?? ?UCHAR?? ?szDSN[SQL_MAX_DSN_LENGTH+1]?? =?? "csql",? ? ??????????? szUID[MAXNAME]?? =?? "sa",? ? ??????????? szAuthStr[MAXNAME]?? =?? "pass"; ? ?? ?//SQL语句 ?? ??? ?//直接SQL语句 ?? ?UCHAR?? ?sql[37] = "insert into test values('aaa','100')"; ?? ??? ?//预编译SQL语句 ?? ?UCHAR?? ?pre_sql[29] = "insert into test values(?,?)"; ?? ?//1.连接数据源 ?? ??? ?// 分配ODBC 环境句柄 ?? ?retcode?? =?? SQLAllocHandle?? (SQL_HANDLE_ENV,?? NULL,?? &henv);?? // 告诉ODBC这是一个3.0标准的应用程序?? ?retcode?? =?? SQLSetEnvAttr(henv,?? SQL_ATTR_ODBC_VERSION,?? (SQLPOINTER)SQL_OV_ODBC3,?? SQL_IS_INTEGER);? ? ?? ?retcode?? =?? SQLAllocHandle(SQL_HANDLE_DBC,?? henv,?? &hdbc1);? ? ?? ?retcode?? =?? SQLConnect(hdbc1,?? szDSN,(SWORD)strlen(szDSN),?? szUID,(SWORD)strlen(szUID),?? szAuthStr,(SWORD)strlen(szAuthStr));?? ? ?? ?//判断连接是否成功 ?? ?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); ?? ??? ? ?? ??? ?//第二种方式 ?? ??? ?//绑定参数方式 ?? ??? ? ?? ??? ? p?? =?? SQL_NTS; ?? ??? ?//1预编译 ?? ??? ?SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不是数据库列相同 ?? ??? ?//2绑定参数值 ?? ??? ?SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,&a,&p); ?? ??? ?SQLBindParameter(hstmt1,2,&b,&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);? ? ?? ?system("pause"); ?? ?return(0);? ? } ------------------------------------------------------------------------------------------------------------------------------------- 注意,表名不能取mh_login,只能login (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |