本帖最后由 zhi_what 于 2012-05-29 17:55:15 编辑

解决方案 »

  1.   

    一个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);
    }