c++链接数据库测试,中文有问题

来源:互联网 发布:同步助手java 编辑:程序博客网 时间:2024/05/12 08:40
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>#include <sql.h>#include <sqlext.h>#include <Sqltypes.h>#include "iostream"using namespace std;/* 检测返回代码是否为成功标志,当为成功标志返回TRUE,否则返回FALSE */#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)/* 检测返回代码是否为失败标志,当为失败标志返回TRUE,否则返回FALSE */#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))HENV henv; /* 环境句柄 */HDBC hdbc; /* 连接句柄 */HSTMT hsmt; /* 语句句柄 */SQLRETURN sret; /* 返回代码 */char szcode[6]; /* 厂商编号 */long cbcode = 0;char szname[21]; /* 厂商名 */long cbname = 0;char szasset[13]; /* 资产总值 */long cbasset = 0;char szaddress[11];/* 厂商地址 */long cbaddress = 0;void main(void){/* 申请一个环境句柄 */SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);/* 设置环境句柄的ODBC版本 */SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);/* 申请一个连接句柄 */SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//SQLConnect(hdbc, (SQLCHAR *)"DM4", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS);SQLConnect(hdbc,(SQLCHAR *)"handgame",SQL_NTS,(SQLCHAR *)"root",SQL_NTS,(SQLCHAR *)"handgame",SQL_NTS);/* 申请一个语句句柄 */SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt);/* 立即执行查询厂商登记表的语句 */SQLExecDirect(hsmt, (SQLCHAR *)"SELECT nickname, charguid, exp, platformgold FROM t_char where account = 'ii21';", SQL_NTS);/* 绑定数据缓冲区 */SQLBindCol(hsmt, 1, SQL_C_CHAR, szcode, sizeof(szcode), &cbcode);SQLBindCol(hsmt, 2, SQL_C_CHAR, szname, sizeof(szname), &cbname);SQLBindCol(hsmt, 3, SQL_C_CHAR, szasset, sizeof(szasset), &cbasset);SQLBindCol(hsmt, 4, SQL_C_CHAR, szaddress, sizeof(szaddress), &cbaddress);/* 取得数据并且打印数据 */printf("厂商编号 厂商名 资产总值 厂商地址/n");for (;;) {sret = SQLFetchScroll(hsmt, SQL_FETCH_NEXT, 0);if (sret == SQL_NO_DATA_FOUND)break;printf("%s %s %s %s/n", szcode, szname, szasset, szaddress);}/* 释放语句句柄 */SQLFreeHandle(SQL_HANDLE_STMT, hsmt);/* 断开与数据源之间的连接 */SQLDisconnect(hdbc);/* 释放连接句柄 */SQLFreeHandle(SQL_HANDLE_DBC, hdbc);/* 释放环境句柄 */SQLFreeHandle(SQL_HANDLE_ENV, henv);}


//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#pragma setlocale("chs")#include <windows.h>#include <sql.h>#include <sqlext.h>#include <iostream>using namespace std;void FetchData(SQLHSTMT hstmt){SQLCHAR buffer_1[256];SQLCHAR buffer_2[256];SQLINTEGER status_1, status_2;SQLBindCol(hstmt, 1, SQL_C_CHAR, buffer_1, 256, &status_1);SQLBindCol(hstmt, 2, SQL_C_CHAR, buffer_2, 256, &status_2);while(SQLFetch(hstmt) != SQL_NO_DATA){cout<<buffer_1<<"\t\t"<<buffer_2<<endl;}}void main(){SQLRETURN   retcode;SQLHENV     henv; //环境句柄SQLHDBC     hdbc; //连接句柄SQLHSTMT    hstmt; //语句句柄//第1步retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);//分配环境句柄if(ODBC_SQLSUCCESS(retcode)){retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); //设置环境属性,注册ODBC版本号if(ODBC_SQLSUCCESS(retcode)){retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//分配连接句柄if(ODBC_SQLSUCCESS(retcode)){//SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, 5, 0);//设置连接属性retcode = SQLConnect(hdbc, (SQLCHAR*) "mysql", SQL_NTS,//数据源名称(SQLCHAR*) "root", SQL_NTS,//用户名(SQLCHAR*) "123", SQL_NTS);//用户密码 //连接数据源if(ODBC_SQLSUCCESS(retcode)){cout<<"连接成功"<<endl;retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//分配语句句柄if(ODBC_SQLSUCCESS(retcode)){retcode = SQLExecDirect(hstmt, (SQLCHAR*)"select * from str", SQL_NTS);if(ODBC_SQLSUCCESS(retcode)){cout<<"SQL查询成功"<<endl;FetchData(hstmt);}SQLFreeHandle(SQL_HANDLE_STMT, hstmt);//释放语句句柄}SQLDisconnect(hdbc);//关闭连接}else{cout<<"连接失败"<<endl;}SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄}}SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄}}


 

原创粉丝点击