• 数据库与vs的连接


    新建一个MFC基于对话框的项目后,更改属性,  其中需要将include(里面都是MySQL的头文件)lib是库文件,将.dll放入与.exe同级目录下,或放入系统里(c:windowssystem32)

    封装一个MySQL类

    CMysql.h

    #pragma once
    #include <mysql.h>
    
    //#include <WinSock2.h>
    #pragma comment(lib,"libmysql.lib")
    //
    #include <list>
    using namespace std;
    
    class CMySql
    {
    public:
        CMySql(void);
        ~CMySql(void);
    public:
        bool  ConnectMySql(char *host,char *user,char *pass,char *db);
        void  DisConnect();
        bool  SelectMySql(char* szSql,int nColumn,list<string>& lstStr);
       
        //更新:删除、插入、修改
        bool  UpdateMySql(char* szSql);
     
    private:
        MYSQL *sock;   
        MYSQL_RES *results;   
        MYSQL_ROW record; 
       
    };

    CMysql.cpp

    #include "stdafx.h"
    #include "CMySql.h"
    
    
    CMySql::CMySql(void)
    {
        /*这个函数用来分配或者初始化一个MYSQL对象,用于连接mysql服务端。
        如果你传入的参数是NULL指针,它将自动为你分配一个MYSQL对象,
        如果这个MYSQL对象是它自动分配的,那么在调用mysql_close的时候,会释放这个对象*/
        sock = new MYSQL;
        mysql_init(sock );  
        mysql_set_character_set(sock,"gb2312"); //gb2312 中华人民共和国简体字标准
    }
    
    
    CMySql::~CMySql(void)
    {
        if(sock)
        {
            delete sock;
            sock = NULL;
        }
        
    }
    
    void CMySql::DisConnect()
    {
        mysql_close(sock);
    }
    
    bool CMySql::ConnectMySql(char *host,char *user,char *pass,char *db)
    {
       
        if (!mysql_real_connect(sock, host, user, pass, db, 0, NULL, CLIENT_MULTI_STATEMENTS))
        {
            //连接错误
            return false;
        }
        
        return true;
    }
    
    bool CMySql::SelectMySql(char* szSql,int nColumn,list<string>& lstStr)
    {
        //mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句
         if(mysql_query(sock,szSql))return false;
    
         /*·mysql_store_result 对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等)
         返回值:
         . CR_COMMANDS_OUT_OF_SYNC   以不恰当的顺序执行了命令。
       · CR_OUT_OF_MEMORY   内存溢出。
       · CR_SERVER_GONE_ERROR   MySQL服务器不可用。
       · CR_SERVER_LOST   在查询过程中,与服务器的连接丢失。
       · CR_UNKNOWN_ERROR   出现未知错误。*/
        results=mysql_store_result(sock);
        if(NULL == results)return false;
        while (record = mysql_fetch_row(results))
        {
            
             for(int i = 0;i < nColumn;i++)
             {
                 lstStr.push_back(record[i]);
             }
        
    
        }
    
        return true;
    }
    
     bool  CMySql::UpdateMySql(char* szSql)
     {
        if(!szSql)return false;
    
        if(mysql_query(sock,szSql))return false;
    
        return true;
     }

    注册按钮实现函数:

    void CMysqlDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        UpdateData();
        char sz[100] = {0};
        sprintf_s(sz,"insert user values ('%s','%s')",m_edituser,m_editpsw);
        if(theApp.m_mysql.UpdateMySql(sz))
        {
            MessageBox(_T("注册成功"));
        }
        else
            MessageBox(_T("注册失败"));
    }

    登陆按钮实现函数:

    void CMysqlDlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        UpdateData();
        char sz[100] = {0};
        list<string> lststr;
        string password;
        sprintf_s(sz,"select password from user where username = '%s'",m_edituser);
        if(theApp.m_mysql.SelectMySql(sz,1,lststr))
        {
            password = lststr.front();
            lststr.pop_front();
            if(strcmp(password.c_str(),m_editpsw) == 0)
            {
                MessageBox("登陆成功");
           CMysqlDlg::OnOK();

            MyDlg mydlg;
            theApp.m_pMainWnd = &mydlg;
            mydlg.DoModal();

    
            }
            else
            {
                MessageBox("登陆失败");
            }
        }
    }

    OnOK是关闭窗口函数;

     

    更新按钮的实现

    void MyDlg::OnBnClickedButton1()
    {
        UpdateData();
        // TODO: 在此添加控件通知处理程序代码
        if(theApp.m_mysql.UpdateMySql(m_editstr.GetBuffer()))
        {
            MessageBox("登陆成功");    
        }
    }

    其中需要注意的:CString 转成 char*类型的函数GetBuffer()

    String 的内部是用char* 来封装的,装成char*的函数是c_str()

  • 相关阅读:
    第三章-套接字编程
    unix网络编程第四章----基于TCP套接字编程
    unix网络编程第一章demo
    unix网络编程第2章
    论epoll的实现
    Select函数实现
    函数式编程语言
    Git
    python库-urllib
    PIL处理图片信息
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/8675731.html
Copyright © 2020-2023  润新知