自学C++连接SQL server ,在进行select时输出的时间是乱码,有人知道是什么原因吗?
还有一个问题,就是我对数据库进行update的时候总是显示更新失败,看了很久都找不到原因
#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 update_income_money()
{
cout << "请输入需要修改的记录编号;" << endl;
//string in_no;
//cin >> in_no;
string in_money;
cout << "请输入需要修改的金额:" << endl;
cin >> in_money;
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请句柄
string str1 = "use money";
string str2 = "update income set income_money = ' where income_no= 2";
/* cout << "请输入需要修改的记录编号;" << endl;
string in_no;
cin >> in_no;
string in_money;
cout << "请输入需要修改的金额:" << endl;
cin >> in_money;*/
string str3 = str2 + in_money + "',";//+ in_no + "'";
ret = SQLExecDirect(hstmt, (SQLCHAR*)str1.c_str(), SQL_NTS);
ret = SQLExecDirect(hstmt, (SQLCHAR*)str2.c_str(), SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
cout << "更新记录成功!" << endl;
else
cout << "更新记录失败!" << endl;
free();
}
//查找收入表记录
void select_income()
{
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请句柄
string str1 = "use money";
string str2 = "select income_no,income_description,income_money, CONVERT(varchar,GETDATE(),23) from income where income_no='";
cout << "请输入需要查找的记录编号:" << endl;
string in_no;
cin >> in_no;
string str3 = str2 + in_no + "'";
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)
{
SQLCHAR str1[10], str2[12], str3[10],str4[15];//用来存放从数据库获取的列信息,你有几列就定义几个变量
SQLLEN len_str1, len_str2, len_str3,len_str4;//字符串对应长度,你有几列就定义几个变量
//printf("%s\t%s\t%s\n", "书籍编号", "书籍名称", "数量");
cout << "编号" << " " << "描述" << " " << "金额" << " " <<"时间" << endl;
while (SQLFetch(hstmt) != SQL_NO_DATA)
{
//你有几列就调用几次SQLGetData函数,注意找规律哦
SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 10, &len_str1); //获取第一列数据
SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 12, &len_str2); //获取第二列数据
SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 10, &len_str3);
SQLGetData(hstmt, 3, SQL_C_CHAR, str4, 15, &len_str4); //获取第三列数据
printf("%s\t%s\t%s\t%s\n", str1, str2, str3,str4);
}
}
free();
}
int main()
{
connect();
update_income_money();
select_income();
return 0;
}