这里介绍下比较简单的方式,引用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. switch语句的执行过程

    switch语句的执行规则如下: 1.从第一个case开始判断,不匹配则跳到下一个case继续判断: 2.遇到break则跳出switch语句: 3.default一般是没有匹配项才执行的,一般是放在 ...

  2. 小内存VPS apache并发控制参数prefork调优

    小内存VPS优化(使用wdcp lnamp一键包安装环境的情况下): 1.主要优化perfork模式下几个参数,防止开启过多的httpd进程占用大量内存导致内存满:在wdcp下修改的httpd配置文件 ...

  3. Eclispe与JDK

    一.Eclispe 1.1 Eclispe发布版本 下面是目前已知的版本代号 (Release)[2015年2月] Eclipse 3.1 版本代号 IO [木卫1,伊奥] Eclipse 3.2 版 ...

  4. Hadoop日记Day11---主从节点接口分析

    一.NameNode 的接口分析 1. NameNode本质 经过前面的学习,可以知道NameNode 本身就是一个java 进程.观察RPC.getServer()方法的第一个参数,发现是this, ...

  5. Photoshop CS4破解方法

    先在网上下载Photoshop CS4的版本,安装后按如下步骤操作即可. 激活码: 1330-1082-3503-2270-3738-6738 1330-1776-8671-6289-7706-291 ...

  6. Mysql + Mybatis动态建表

    service层业务 package com.zx.common.service.impl; import com.zx.common.entity.SysUser; import com.zx.co ...

  7. Python RASP 工程化:一次入侵的思考

    前言 今天讲的内容会很深,包括一些 Python的高级用法和一些自己创造的黑科技,前半部分内容你们可能听过,后半部分内容就真的是黑科技了... 深入的研究和思考,总会发现很多有意思的东西.每一次的研究 ...

  8. Allegro怎么对元器件进行对齐

    Allegro怎么对元器件进行对齐? Ø选择操作模式,点击菜单栏setup-Application Mode,然后选择Placement Edit模式,进行操作: Ø然后Find面板勾选器件选项,sy ...

  9. 深入浅出Spark的Checkpoint机制

    1 Overview 当第一次碰到 Spark,尤其是 Checkpoint 的时候难免有点一脸懵逼,不禁要问,Checkpoint 到底是什么.所以,当我们在说 Checkpoint 的时候,我们到 ...

  10. raft--分布式一致性协议

    0. 写在前面的话 一直从事分布式对象存储工作,在分布式对象存储的运营,开发等工作中,数据一致性是至关重要的.因此想写一篇关于分布式一致性的文章.一来,可以和大家分享.二来,可以提高自己的文字提炼能力 ...