为什么c语言第二次运行就错误,C语言 + ODBC API 为什么运行第二次就出现异常了...

C/C++ code#include "stdio.h"

#include "windows.h"

#include "ODBCSDK/include/sql.h" //包含基本的ODBC API定义的头文件

#include "ODBCSDK/include/sqlext.h" //包含有扩展的ODBC定义的头文件

#include "ODBCSDK/include/sqlucode.h" //包含Unicode版本的ODBC定义的头文件

int main(int argc, char* argv[])

{

#define IFRETSUC if(SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)

SQLTCHAR szDSN[] = L"MSSQLDemoDSN"; //保存DSN名称

SQLTCHAR szUser[] = L"sa"; //保存用户名称

SQLTCHAR szPwd[] = L"123456"; //保存密码

SQLRETURN ret;

SQLHENV hEnv = SQL_NULL_HENV;

SQLHDBC hDBC = SQL_NULL_HDBC;

SQLHSTMT hSTMT = SQL_NULL_HSTMT;

ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv); //在使用ODBC时必须先申请环境句柄

IFRETSUC

{

printf("申请环境句柄失败! Err:%d",ret);

system("pause");

return 0;

}

ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

IFRETSUC

{

printf("设置ODBC版本失败! Err:%d",ret);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

ret = SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDBC);

IFRETSUC

{

printf("申请连接句柄失败! Err:%d",ret);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

ret = SQLConnect(hDBC, szDSN, SQL_NTS, szUser, SQL_NTS, szPwd, SQL_NTS);

IFRETSUC

{

printf("连接数据库失败! Err:%d",ret);

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

ret = SQLAllocHandle(SQL_HANDLE_STMT,hDBC,&hSTMT);

IFRETSUC

{

printf("申请语句句柄失败! Err:%d",ret);

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

//先删除原先的MSSQLDemo数据库

ret = SQLExecDirect(hSTMT,

(SQLTCHAR*)L"if exists(select * from sysdatabases where name = 'MSSQLDemo') drop database MSSQLDemo",

SQL_NTS);

IFRETSUC

{

printf("删除原先的MSSQLDemo数据库失败! Err:%d",ret);

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

//创建MSSQLDemo数据库

ret = SQLExecDirect(hSTMT, (SQLTCHAR*)L"create database MSSQLDemo", SQL_NTS);

IFRETSUC

{

printf("创建MSSQLDemo数据库失败! Err:%d",ret);

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

system("pause");

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值