c++链接数据库测试,中文有问题
2013-08-12 18:30
309 查看
#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); //释放环境句柄 } }
相关文章推荐
- c++链接数据库测试,中文有问题
- NET 数据访问架构指南,特别是数据库连接的测试.即监视链接池化
- WEB工程(JAVA链接)数据库UPDATE传值时中文乱码解决
- C++链接SQL代码测试
- hibernate数据库链接加中文乱码处理的参数方法
- idea2017创建javaweb项目并导入jdbc包,测试链接数据库
- LINUX下环境下链接oracle 数据库搭建测试环境
- C/C++使用ODBC链接数据库
- MyEclipse链接数据库和sqlyog中文乱码
- python 链接 ORACLE 数据库,并打印数据.解决中文乱码问题
- C++封装ADO数据库连接,并附上DLL源码和测试程序
- 测试数据库链接数
- 测试 数据库是否链接成功
- MongoDB&C++开发 (一)链接数据库并插入文档
- 如何在Linux下用C/C++语言操作数据库sqlite3(很不错!设计编译链接等很多问题!)
- 【数据库开发】C++测试redis中的publish/subscribe
- C++ 遍历指定进程的线程列表,在 VS2015 测试通过,已添加中文注释。
- React Native 数据库链接测试代码
- 精华的微软文章".NET 数据访问架构指南",特别是数据库连接的测试.即监视链接池化 (2)
- VS2005 C++MFC 数据库返回中文数据 显示时乱码