C++成功连接SQL后,使用Visual Studio进行insert操作的时候总是失败,检查了很多遍都没发现哪里出了问题。
#undef UNICODE
#undef _UNICODE
#include<Windows.h>
#include <sql.h>
#include <sqlext.h>
#include<sqltypes.h>
#include <iostream>
#include<string>
#include <iomanip>
using namespace std;
//定义全局变量
SQLRETURN ret = NULL;//返回信息
SQLHENV henv = NULL;//环境句柄
SQLHDBC hdbc = NULL;//连接句柄
SQLHSTMT hstmt = NULL;//语句句柄
//释放空间
void free()
{
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);//释放语句
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接
SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境
}
//连接数据库
void connect()//数据库连接函数
{
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);//设置环境
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//申请数据库连接
ret = SQLConnect(hdbc, (SQLTCHAR*)("Csql"), SQL_NTS, (SQLTCHAR*)("sa"), SQL_NTS, (SQLTCHAR*)("sa"), SQL_NTS);
if ((ret == SQL_SUCCESS) || (ret == SQL_SUCCESS_WITH_INFO))
{
cout << "数据库连接成功!" << endl;
}
else
{
cout << "数据库连接失败!" << endl;
}
}
//插入支出记录
void expend_money()
{
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请句柄
string str1 = "use money";//第一句要执行的SQL语句
string str2 = "insert into expend (expend_description,expend_money) values ('";//第二句要执行的SQL语句
cout << "请依次输入支出描述和支出金额: "<<endl;
string ex_descr;
string ex_money;
cin >> ex_descr >> ex_money;
string str3 = str2 + ex_descr + "','" + ex_money + ")";
ret = SQLExecDirect(hstmt, (SQLCHAR*)str1.c_str(), SQL_NTS);
ret = SQLExecDirect(hstmt, (SQLCHAR*)str3.c_str(), SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
cout << "插记录入成功" << endl;
}
else {
cout << "插入记录失败!" << endl;
}
free();
}
int main()
{
connect();
expend_money();
return 0;
}