这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作。

1.将MySql.Data.dll引用到你的项目中

下载地址:MySql.Data.rar

添加引用后在你的数据库操作类(如MySqlHelper.cs)中添加引用声明

using MySql.Data;
using MySql.Data.MySqlClient;

2.添加一个MySqlHelper类来对MySql数据库进行操作。 MySqlHelper.CS网上有很多列子,把代码拷下来就可以直接使用。如果里面的ExcecuteNonquery、GetDataSet等基本访问数据库方法还是无法满足你开发需求的话,你还可以自己重新改写代码来扩充其功能。

MySqlHelper:

using System;
using System.Collections;
using System.Configuration;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;

/// <summary>
///MYSQLHelper 的摘要说明
/// </summary>
public abstract class MySqlHelper

{

    //数据库连接字符串
    public static string Conn = "Database='wp';Data Source='localhost';User Id='root';Password='root';charset='utf8';pooling=true";

    // 用于缓存参数的HASH表
    private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

    /// <summary>

    ///  给定连接的数据库用假设参数执行一个sql命令(不返回数据集)

    /// </summary>

    /// <param name="connectionString">一个有效的连接字符串</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns>执行命令所影响的行数</returns>
    public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        MySqlCommand cmd = new MySqlCommand();

        using (MySqlConnection conn = new MySqlConnection(connectionString))

        {

            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

            int val = cmd.ExecuteNonQuery();

            cmd.Parameters.Clear();

            return val;

        }

    }

    /// <summary>

    /// 用现有的数据库连接执行一个sql命令(不返回数据集)

    /// </summary>

    /// <param name="connection">一个现有的数据库连接</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns>执行命令所影响的行数</returns>
    public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        MySqlCommand cmd = new MySqlCommand();

        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

        int val = cmd.ExecuteNonQuery();

        cmd.Parameters.Clear();

        return val;

    }

    /// <summary>

    ///使用现有的SQL事务执行一个sql命令(不返回数据集)

    /// </summary>

    /// <remarks>

    ///举例:

    ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

    /// </remarks>

    /// <param name="trans">一个现有的事务</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns>执行命令所影响的行数</returns>
    public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        MySqlCommand cmd = new MySqlCommand();

        PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);

        int val = cmd.ExecuteNonQuery();

        cmd.Parameters.Clear();

        return val;

    }

    /// <summary>

    /// 用执行的数据库连接执行一个返回数据集的sql命令

    /// </summary>

    /// <remarks>

    /// 举例:

    ///  MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

    /// </remarks>

    /// <param name="connectionString">一个有效的连接字符串</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns>包含结果的读取器</returns>
    public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        //创建一个MySqlCommand对象
        MySqlCommand cmd = new MySqlCommand();

        //创建一个MySqlConnection对象
        MySqlConnection conn = new MySqlConnection(connectionString);

        //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,

        //因此commandBehaviour.CloseConnection 就不会执行
        try

        {

            //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

            //调用 MySqlCommand  的 ExecuteReader 方法
            MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

            //清除参数
            cmd.Parameters.Clear();

            return reader;

        }

        catch

        {

            //关闭连接,抛出异常
            conn.Close();

            throw;

        }

    }

    /// <summary>

    /// 返回DataSet

    /// </summary>

    /// <param name="connectionString">一个有效的连接字符串</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns></returns>
    public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        //创建一个MySqlCommand对象
        MySqlCommand cmd = new MySqlCommand();

        //创建一个MySqlConnection对象
        MySqlConnection conn = new MySqlConnection(connectionString);

        //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,

        try

        {

            //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

            //调用 MySqlCommand  的 ExecuteReader 方法
            MySqlDataAdapter adapter = new MySqlDataAdapter();

            adapter.SelectCommand = cmd;

            DataSet ds = new DataSet();

            adapter.Fill(ds);

            //清除参数
            cmd.Parameters.Clear();

            conn.Close();

            return ds;

        }

        catch (Exception e)

        {

            throw e;

        }

    }

    /// <summary>

    /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列

    /// </summary>

    /// <remarks>

    ///例如:

    ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

    /// </remarks>

    ///<param name="connectionString">一个有效的连接字符串</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
    public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        MySqlCommand cmd = new MySqlCommand();

        using (MySqlConnection connection = new MySqlConnection(connectionString))

        {

            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

            object val = cmd.ExecuteScalar();

            cmd.Parameters.Clear();

            return val;

        }

    }

    /// <summary>

    /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列

    /// </summary>

    /// <remarks>

    /// 例如:

    ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));

    /// </remarks>

    /// <param name="connection">一个存在的数据库连接</param>

    /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>

    /// <param name="cmdText">存储过程名称或者sql命令语句</param>

    /// <param name="commandParameters">执行命令所用参数的集合</param>

    /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
    public static object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)

    {

        MySqlCommand cmd = new MySqlCommand();

        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

        object val = cmd.ExecuteScalar();

        cmd.Parameters.Clear();

        return val;

    }

    /// <summary>

    /// 将参数集合添加到缓存

    /// </summary>

    /// <param name="cacheKey">添加到缓存的变量</param>

    /// <param name="commandParameters">一个将要添加到缓存的sql参数集合</param>
    public static void CacheParameters(string cacheKey, params MySqlParameter[] commandParameters)

    {

        parmCache[cacheKey] = commandParameters;

    }

    /// <summary>

    /// 找回缓存参数集合

    /// </summary>

    /// <param name="cacheKey">用于找回参数的关键字</param>

    /// <returns>缓存的参数集合</returns>
    public static MySqlParameter[] GetCachedParameters(string cacheKey)

    {

        MySqlParameter[] cachedParms = (MySqlParameter[])parmCache[cacheKey];

        if (cachedParms == null)

            return null;

        MySqlParameter[] clonedParms = new MySqlParameter[cachedParms.Length];

        , j = cachedParms.Length; i < j; i++)

            clonedParms[i] = (MySqlParameter)((ICloneable)cachedParms[i]).Clone();

        return clonedParms;

    }

    /// <summary>

    /// 准备执行一个命令

    /// </summary>

    /// <param name="cmd">sql命令</param>

    /// <param name="conn">OleDb连接</param>

    /// <param name="trans">OleDb事务</param>

    /// <param name="cmdType">命令类型例如 存储过程或者文本</param>

    /// <param name="cmdText">命令文本,例如:Select * from Products</param>

    /// <param name="cmdParms">执行命令的参数</param>
    private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)

    {

        if (conn.State != ConnectionState.Open)

            conn.Open();

        cmd.Connection = conn;

        cmd.CommandText = cmdText;

        if (trans != null)

            cmd.Transaction = trans;

        cmd.CommandType = cmdType;

        if (cmdParms != null)

        {

            foreach (MySqlParameter parm in cmdParms)

                cmd.Parameters.Add(parm);

        }

    }

}

MySqlHelper里面的方法和SqlHelper差不多,就不一一说明了。

除此之外引用DBUTILITY类库也是一个很好的选择,DBUTILITY.DLL是一个集成SQLHELPER、MYSQLHELPER以及ORACLEHELPER等众多数据库操作类的类库,添加引用后就可以直接调用其中方法对数据库进行查询、编辑等操作,十分的方便。

3.配置你的MYSQL数据库链接字符串如下:

//数据库连接字符串
public static string Conn = "Database='数据库名';Data Source='数据库服务器地址';User Id='数据库用户名';Password='密码';charset='utf8';pooling=true";

由于PHPMYADMIN相当于一个小型网站,因此在你的数据库连接中还要设置下PHPMYADMIN编码charset='utf8'

4.以上准备工作完成后,就可以通过调用MySQLHelper类里面的方法来对MYSQL数据库进行操作了,这些方法的用法也与SqlHelper类似。

dgv.DataSource=MySqlHelper.GetDataSet(MySqlHelper.Conn, CommandType.Text, ].DefaultView;

执行MySql查询后得到结果:

对应的MySql数据库中的数据:

C# 基于MySQL的数据层基类(MySQLHelper)的更多相关文章

  1. Hibernate 数据层基类实现

    提取经常操作表如新增.修改.删除.查询.分页查询.统计等业务功能,形成基类,用泛型传参,有利于每个实体对象数据层继承. package com.base.dao; import java.io.Ser ...

  2. BaseDAL最牛数据层基类2

    using System; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using Syste ...

  3. BaseDAL数据层基类1

    /// <summary> /// EF数据库操作基类 /// </summary> /// <typeparam name="T"></ ...

  4. 使用SqlSugar封装的数据层基类

    首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...

  5. 基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理

    我们在设计数据库表的时候,往往为了方便,主键ID一般采用字符串类型或者GUID类型,这样对于数据库表记录的迁移非常方便,而且有时候可以在处理关联记录的时候,提前对应的ID值.但有时候进行数据记录插入的 ...

  6. mysql批量插入数据的基类

    自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...

  7. BIM工程信息管理系统-EF实体框架数据操作基类

    EF实体框架数据操作基类主要是规范增.改.查.分页.Lambda表达式条件处理,以及异步操作等特性,这样能够尽可能的符合基类这个特殊类的定义,实现功能接口的最大化重用和统一. 1.程序代码 /// & ...

  8. 四、spring集成ibatis进行项目中dao层基类封装

    Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...

  9. EF实体框架数据操作基类(转)

    //----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司 ...

随机推荐

  1. C语言学习之结构体

    前言 一直以来,C语言的学习都在入门阶段,只用到数组.函数.循环.选择.位运算这些基本的知识,较少用到指针.预处理.结构体.枚举类型.文件操作等这些C语言的精髓内容,现在想想真不敢说自己熟练掌握C语言 ...

  2. 前端项目模块化的实践1:搭建 NPM 私有仓库管理源码及依赖

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  3. Asp.Net_的传值跟存储值操作

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  4. Scrapy持久化存储

    基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作; 执行输出指定格式进行存储:将爬 ...

  5. Keyshot+AD渲染PCB效果图

    Keyshot+AD渲染PCB效果图 1.前言 前些天,公司同事找到我说,公司的展会宣传册要更新的了,有几款新的产品需要更新添加上去,大部分的新产品都有实物demo,可以拍照修一下图弄上去.但不巧,其 ...

  6. idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输

    众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道,确保数据运输 ...

  7. Windos 下python2.7安装 pymssql 解决方案

    最近在学python,到安装pymssql这一块遇到了不少问题. 第一:如何安装python 模块,也是最主要的问题. 可以这么理解:在安装python其它模块之前,可以先安装一个负责安装模块的模块. ...

  8. (第十二周)新功能WBS

    项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 新增加的功能:背景音乐 功能 子功能 二级子功能 预计花费时间(小时) 实际花费时间(小时) 背景音乐 界面组 ...

  9. 第五次Scrum meeting

    第五次Scrum meeting 会议内容: 连接方面:确定封装成json的文本格式,尽量在满足在线组和手机客户端两组的情况下,降低自身的难度 测试方面:进行新一轮测试,主要测试程序的稳定性和可靠性, ...

  10. The role of the inter-controller consensus in the placement of distributed SDN controllers

    2017 Computer Communications 问题:in-band网络的多控制器放置问题,考虑到多个控制器之间的同步(Ctr-Ctr)可能影响到控制器与交换机(Ctr-Sw)的时延: 关于 ...