odbc连接MySQL,存取数据。 在线等~~~~ 本帖最后由 zhi_what 于 2012-05-29 17:55:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一个api的数据库操作程序 希望对你有帮助#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include <sql.h>#include <sqlext.h>#include <sqltypes.h>#include "resource.h"#include "MainDlg.h"#define LOGIN_TIMEOUT 30#define MAXBUFLEN 255#define CHECKDBSTMTERROR(hwnd,result,hstmt) if(SQL_ERROR == result) {ShowDBStmtError (hwnd, hstmt); return ;}BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ return TRUE;}void DBLogin (HWND hwnd);void DBRegister (HWND hwnd);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch(id) { case IDC_BUTTONENTER: { DBLogin (hwnd); } break; case IDC_BUTTONREGISTER: { DBRegister(hwnd); } break; default: break; }}void Main_OnClose(HWND hwnd){ EndDialog(hwnd, 0);}void ShowDBError (HWND hwnd, SQLSMALLINT type, SQLHANDLE sqlHandle){ char pStatus[10], pMsg[101]; SQLSMALLINT SQLmsglen; char error[200] = {0}; SQLINTEGER SQLerr; long erg2 = SQLGetDiagRec (type, sqlHandle, 1, (SQLCHAR *)pStatus, &SQLerr, (SQLCHAR *)pMsg, 100, &SQLmsglen); wsprintf(error, "%s (%d)\n", pMsg, (int)SQLerr); MessageBox (hwnd, error, TEXT("数据库执行错误"), MB_ICONERROR | MB_OK);}void ShowDBConnError (HWND hwnd, SQLHDBC hdbc){ ShowDBError (hwnd, SQL_HANDLE_DBC, hdbc);}void ShowDBStmtError (HWND hwnd, SQLHSTMT hstmt){ ShowDBError (hwnd, SQL_HANDLE_STMT, hstmt);}void DBLogin (HWND hwnd){ SQLHENV henv = NULL; //环境句柄 SQLHDBC hdbc = NULL; //连接句柄 SQLHSTMT hstmt = NULL; //一个SQL语句句柄 SQLRETURN result; //执行结果 SQLCHAR ConnStrIn[MAXBUFLEN]="DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=ddj;CharSet=gbk;"; SQLCHAR ConnStrOut[MAXBUFLEN]; //分配环境句柄 result = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //申请环境句柄 //设置环境属性 result = SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); //FZ分配连接句柄 result = SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc); //设置连接属性 result = SQLSetConnectAttr (hdbc, SQL_LOGIN_TIMEOUT, (void *)LOGIN_TIMEOUT, 0); //连接数据库 result = SQLDriverConnect (hdbc, NULL, ConnStrIn, SQL_NTS, ConnStrOut, MAXBUFLEN, (SQLSMALLINT *)0, SQL_DRIVER_NOPROMPT); if(SQL_ERROR == result) { ShowDBConnError (hwnd, hdbc); return; }//分配语句句柄 result = SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt); result = SQLPrepare (hstmt, (SQLCHAR *)"Select Fname, Fpassword from T_person", SQL_NTS); CHECKDBSTMTERROR (hwnd, result, hstmt); result = SQLExecute (hstmt);//获得用户输入的用户名与密码 TCHAR UserName[20]; GetDlgItemText (hwnd, IDC_EDITUSER, UserName, sizeof(UserName) / sizeof(TCHAR)); TCHAR UserPassword[20]; GetDlgItemText (hwnd, IDC_EDITPASSWORD, UserPassword, sizeof(UserPassword) / sizeof(TCHAR)); bool found = false;//取出数据库中的用户名与密码与用户输入的数据对照 SQLINTEGER cbsatid = SQL_NTS; while(SQLFetch(hstmt) != SQL_NO_DATA_FOUND) { TCHAR name[20]; SQLGetData (hstmt, 1, SQL_C_CHAR, name, sizeof(name) / sizeof(TCHAR), &cbsatid); TCHAR password[20]; SQLGetData (hstmt, 2, SQL_C_CHAR, password, sizeof(password) / sizeof(TCHAR), &cbsatid); if(0 == strcmp(UserName, name) && 0 == strcmp(UserPassword, password)) { MessageBox (hwnd, TEXT("登录成功!"), TEXT("提示"), MB_OK); found = true; break; } } if(found == false) { MessageBox (hwnd, TEXT("登录失败!"), TEXT("提示"), MB_OK); } CHECKDBSTMTERROR (hwnd, result, hstmt); SQLFreeStmt(hstmt, SQL_CLOSE); //释放语句句柄 SQLDisconnect (hdbc); //断开连接 SQLFreeHandle (SQL_HANDLE_DBC, hdbc); //释放连接句柄 SQLFreeHandle (SQL_HANDLE_ENV, henv); //释放环境句柄}void DBRegister (HWND hwnd){ SQLHENV henv = NULL; //环境句柄 SQLHDBC hdbc = NULL; //连接句柄 SQLHSTMT hstmt = NULL; //一个SQL语句句柄 SQLRETURN result; //执行结果 SQLCHAR ConnStrIn[MAXBUFLEN]="DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=ddj;CharSet=gbk;"; SQLCHAR ConnStrOut[MAXBUFLEN]; //分配环境句柄 result = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //申请环境句柄 //设置环境属性 result = SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); //FZ分配连接句柄 result = SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc); //设置连接属性 result = SQLSetConnectAttr (hdbc, SQL_LOGIN_TIMEOUT, (void *)LOGIN_TIMEOUT, 0); //连接数据库 result = SQLDriverConnect (hdbc, NULL, ConnStrIn, SQL_NTS, ConnStrOut, MAXBUFLEN, (SQLSMALLINT *)0, SQL_DRIVER_NOPROMPT); if(SQL_ERROR == result) { ShowDBConnError (hwnd, hdbc); return; } //获取注册的用户名跟密码 TCHAR UserName[20]; GetDlgItemText (hwnd, IDC_EDITUSER, UserName, sizeof(UserName) / sizeof(TCHAR)); TCHAR UserPassword[20]; GetDlgItemText (hwnd, IDC_EDITPASSWORD, UserPassword, sizeof(UserPassword) / sizeof(TCHAR)); TCHAR sql[100]; wsprintf(sql, "Insert InTo T_person(Fname, Fpassword) value('%s', '%s')", UserName, UserPassword); //分配语句句柄 result = SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt); result = SQLPrepare (hstmt, (SQLCHAR *)sql, SQL_NTS); CHECKDBSTMTERROR (hwnd, result, hstmt); result = SQLExecute (hstmt); CHECKDBSTMTERROR (hwnd, result, hstmt); SQLFreeStmt(hstmt, SQL_CLOSE); //释放语句句柄 SQLDisconnect (hdbc); //断开连接 SQLFreeHandle (SQL_HANDLE_DBC, hdbc); //释放连接句柄 SQLFreeHandle (SQL_HANDLE_ENV, henv); //释放环境句柄 MessageBox (hwnd, TEXT("注册成功"), TEXT(" "), MB_OK); //清空文本框 SetDlgItemText(hwnd, IDC_EDITUSER, NULL); SetDlgItemText(hwnd, IDC_EDITPASSWORD, NULL);} 如何char还原为四位整数 工具条左侧显示问题 遍历目录问题 SetWindowPos Tree仍然被其它控件遮蔽着...谢谢 用VC开发的程序制作安装程序,怎么在新安装XP的机器上安装后运行时只有进程没有界面? 往剪贴板拷贝字符串的问题 请教关于在VS2005中使用COM的一个问题 winsock能实现ftp连接吗? 关于RGB宏的问题! 请问要怎么实现sdi的resizing只允许上下resizing,而左右保持全屏状态? 正调试着程序,怎么后来就不能调试了啊?好像说找不到XX.exe文件?? 图像压缩代码但是不能实现压缩,大家帮忙看下吧
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include "resource.h"
#include "MainDlg.h"#define LOGIN_TIMEOUT 30
#define MAXBUFLEN 255
#define CHECKDBSTMTERROR(hwnd,result,hstmt) if(SQL_ERROR == result) {ShowDBStmtError (hwnd, hstmt); return ;}BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
} return FALSE;
}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
return TRUE;
}
void DBLogin (HWND hwnd);
void DBRegister (HWND hwnd);
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_BUTTONENTER:
{
DBLogin (hwnd);
}
break;
case IDC_BUTTONREGISTER:
{
DBRegister(hwnd);
}
break; default:
break;
}
}void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}void ShowDBError (HWND hwnd, SQLSMALLINT type, SQLHANDLE sqlHandle)
{
char pStatus[10], pMsg[101];
SQLSMALLINT SQLmsglen;
char error[200] = {0};
SQLINTEGER SQLerr;
long erg2 = SQLGetDiagRec (type, sqlHandle, 1,
(SQLCHAR *)pStatus, &SQLerr,
(SQLCHAR *)pMsg, 100, &SQLmsglen);
wsprintf(error, "%s (%d)\n", pMsg, (int)SQLerr);
MessageBox (hwnd, error, TEXT("数据库执行错误"), MB_ICONERROR | MB_OK);
}void ShowDBConnError (HWND hwnd, SQLHDBC hdbc)
{
ShowDBError (hwnd, SQL_HANDLE_DBC, hdbc);
}void ShowDBStmtError (HWND hwnd, SQLHSTMT hstmt)
{
ShowDBError (hwnd, SQL_HANDLE_STMT, hstmt);
}void DBLogin (HWND hwnd)
{
SQLHENV henv = NULL; //环境句柄
SQLHDBC hdbc = NULL; //连接句柄
SQLHSTMT hstmt = NULL; //一个SQL语句句柄
SQLRETURN result; //执行结果
SQLCHAR ConnStrIn[MAXBUFLEN]="DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=ddj;CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN]; //分配环境句柄
result = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //申请环境句柄
//设置环境属性
result = SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
//FZ分配连接句柄
result = SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc);
//设置连接属性
result = SQLSetConnectAttr (hdbc, SQL_LOGIN_TIMEOUT, (void *)LOGIN_TIMEOUT, 0);
//连接数据库
result = SQLDriverConnect (hdbc, NULL, ConnStrIn, SQL_NTS, ConnStrOut, MAXBUFLEN,
(SQLSMALLINT *)0, SQL_DRIVER_NOPROMPT);
if(SQL_ERROR == result)
{
ShowDBConnError (hwnd, hdbc);
return;
}//分配语句句柄
result = SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt);
result = SQLPrepare (hstmt, (SQLCHAR *)"Select Fname, Fpassword from T_person", SQL_NTS);
CHECKDBSTMTERROR (hwnd, result, hstmt);
result = SQLExecute (hstmt);
//获得用户输入的用户名与密码
TCHAR UserName[20];
GetDlgItemText (hwnd, IDC_EDITUSER, UserName, sizeof(UserName) / sizeof(TCHAR));
TCHAR UserPassword[20];
GetDlgItemText (hwnd, IDC_EDITPASSWORD, UserPassword, sizeof(UserPassword) / sizeof(TCHAR)); bool found = false;
//取出数据库中的用户名与密码与用户输入的数据对照
SQLINTEGER cbsatid = SQL_NTS;
while(SQLFetch(hstmt) != SQL_NO_DATA_FOUND)
{
TCHAR name[20];
SQLGetData (hstmt, 1, SQL_C_CHAR, name, sizeof(name) / sizeof(TCHAR), &cbsatid);
TCHAR password[20];
SQLGetData (hstmt, 2, SQL_C_CHAR, password, sizeof(password) / sizeof(TCHAR), &cbsatid); if(0 == strcmp(UserName, name) && 0 == strcmp(UserPassword, password))
{
MessageBox (hwnd, TEXT("登录成功!"), TEXT("提示"), MB_OK);
found = true;
break;
}
} if(found == false)
{
MessageBox (hwnd, TEXT("登录失败!"), TEXT("提示"), MB_OK);
} CHECKDBSTMTERROR (hwnd, result, hstmt);
SQLFreeStmt(hstmt, SQL_CLOSE); //释放语句句柄
SQLDisconnect (hdbc); //断开连接
SQLFreeHandle (SQL_HANDLE_DBC, hdbc); //释放连接句柄
SQLFreeHandle (SQL_HANDLE_ENV, henv); //释放环境句柄
}void DBRegister (HWND hwnd)
{
SQLHENV henv = NULL; //环境句柄
SQLHDBC hdbc = NULL; //连接句柄
SQLHSTMT hstmt = NULL; //一个SQL语句句柄
SQLRETURN result; //执行结果
SQLCHAR ConnStrIn[MAXBUFLEN]="DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=ddj;CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN]; //分配环境句柄
result = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //申请环境句柄
//设置环境属性
result = SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
//FZ分配连接句柄
result = SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc);
//设置连接属性
result = SQLSetConnectAttr (hdbc, SQL_LOGIN_TIMEOUT, (void *)LOGIN_TIMEOUT, 0);
//连接数据库
result = SQLDriverConnect (hdbc, NULL, ConnStrIn, SQL_NTS, ConnStrOut, MAXBUFLEN,
(SQLSMALLINT *)0, SQL_DRIVER_NOPROMPT);
if(SQL_ERROR == result)
{
ShowDBConnError (hwnd, hdbc);
return;
} //获取注册的用户名跟密码
TCHAR UserName[20];
GetDlgItemText (hwnd, IDC_EDITUSER, UserName, sizeof(UserName) / sizeof(TCHAR));
TCHAR UserPassword[20];
GetDlgItemText (hwnd, IDC_EDITPASSWORD, UserPassword, sizeof(UserPassword) / sizeof(TCHAR));
TCHAR sql[100];
wsprintf(sql, "Insert InTo T_person(Fname, Fpassword) value('%s', '%s')", UserName, UserPassword); //分配语句句柄
result = SQLAllocHandle (SQL_HANDLE_STMT, hdbc, &hstmt);
result = SQLPrepare (hstmt, (SQLCHAR *)sql, SQL_NTS);
CHECKDBSTMTERROR (hwnd, result, hstmt);
result = SQLExecute (hstmt);
CHECKDBSTMTERROR (hwnd, result, hstmt);
SQLFreeStmt(hstmt, SQL_CLOSE); //释放语句句柄
SQLDisconnect (hdbc); //断开连接
SQLFreeHandle (SQL_HANDLE_DBC, hdbc); //释放连接句柄
SQLFreeHandle (SQL_HANDLE_ENV, henv); //释放环境句柄
MessageBox (hwnd, TEXT("注册成功"), TEXT(" "), MB_OK); //清空文本框
SetDlgItemText(hwnd, IDC_EDITUSER, NULL);
SetDlgItemText(hwnd, IDC_EDITPASSWORD, NULL);
}