C# 连接mysql数据库及常规操作

连接数据库、操作数据库,本质是利用数据库提供的动态链接库MySql.Data.dll进行操作。MySql.Data.dll提供以下8个类:

  • MySqlConnection: 连接MySQL服务器数据库。
  • MySqlCommand:执行一条sql语句。
  • MySqlDataReader: 包含sql语句执行的结果,并提供一个方法从结果中阅读一行,需要循环对结果进行处理。
  • MySqlTransaction: 数据库事务操作。
  • MySqlException: MySQL报错时返回的Exception。
  • MySqlCommandBuilder: 自动生成单表命令,用于将对数据集所做的更改与关联的MySQL数据库进行协调。
  • MySqlDataAdapter: 表示用于填充数据集和更新MySQL数据库的一组数据命令和数据库连接。
  • MySqlHelper: 帮助器类,使它更易于与提供程序一起工作。

1.添加动态链接库文件

方法一:Visual Studio,在 项目(右键)-管理NuGet程序包(N)  然后在浏览里面搜索MySql.Data并进行安装

选择后根据提示安装即可。

方法二:手工添加 MySql.Data.dll引用。 MySql.Data.dll可以自行在网上下载,添加方法:

安装完成后:

配置完成后下面就可以开始链接数据库了。

链接字符串:

//链接字符串
public static String connetStr = "server=127.0.0.1;port=3306;user=root;password=root; database=test;";

数据库链接建立:

 public MySqlConnection SqlConn = new MySqlConnection(connetStr);

/****
 * 开启数据库链接
 * 
 */
public void DBConnection()
{
	//确认是否已打开连接,为打开则打开连接
	if (this.SqlConn.State != ConnectionState.Open)
	{
		try
		{
			SqlConn.Open(); 
		}catch(Exception e)
		{

		}
	}
}

数据库关闭:

/// <summary>
/// 关闭数据库连接
/// </summary>
public void DBClose()
{
	//确认是否已打开连接,为打开则打开连接
	if (this.SqlConn.State == ConnectionState.Open)
	{
		SqlConn.Close();
	}
}

数据库查询操作:

/// <summary>
/// 获得查询结果 返回DataTable
/// </summary>
/// <param name="sqlstr">SQL字符串</param>
/// <returns></returns>
public DataTable QuerySql(string sql)
{
	DataTable dt = new DataTable();  
	MySqlDataAdapter mysqlData = new MySqlDataAdapter(sql,SqlConn);
	mysqlData.Fill(dt); 
	return dt;
}

/// <summary>
/// 获得查询结果 返回字符串
/// </summary>
/// <param name="sqlstr">SQL字符串</param>
/// <returns></returns>
public string QueryForString(string sql)
{
 
	 MySqlCommand cmd = new MySqlCommand(sql, SqlConn);
	//执行查询,并返回查询结果集中第一行的第一列。所有其他的列和行将被忽略。select语句无记录返回时,ExecuteScalar()返回NULL值
	Object result = cmd.ExecuteScalar();  
	return result.ToString();
}

/// <summary>
/// 获得查询结果 返回int
/// </summary>
/// <param name="sqlstr">SQL字符串</param>
/// <returns></returns>
public int QueryForInt(string sql)
{ 
	MySqlCommand cmd = new MySqlCommand(sql, SqlConn);
	//执行查询,并返回查询结果集中第一行的第一列。所有其他的列和行将被忽略。select语句无记录返回时,ExecuteScalar()返回NULL值
	Object result = cmd.ExecuteScalar();
	int count = 0;
	if (result != null)
	{
		count = int.Parse(result.ToString());
	}
   
	return count;
}

数据库ddl操作及事务处理:

/// <summary>
/// 操作数据库(无返回值) 单条sql执行
/// </summary>
/// <param name="sqlstr">操作SQL字符串</param>
public bool ExecuteNonQuerySQL(string sql)
{
	Boolean flag = false;
	try
	{
		//确认是否已打开连接,为打开则打开连接
		DBConnection();

		MySqlCommand sqlcommand = new MySqlCommand(sql, SqlConn);
		sqlcommand.ExecuteNonQuery();
		flag= true;
	}
	catch (SqlException ex)
	{
		//Console.WriteLine(ex.Message);
		flag= false;
	}
	finally
	{
		DBClose();
	}
	return flag;
}

/// <summary>
/// 操作数据库(无返回值) 多条sql执行 引入事务概念
/// </summary>
/// <param name="sqlstr">操作SQL字符串</param>
public bool ExecuteNonQuerySQLBatch(List<string> sqlList)
{
	
		//确认是否已打开连接,为打开则打开连接
		DBConnection();

		//事务必须在try外面赋值不然catch里的transaction会报错:未赋值
		MySqlTransaction tran= SqlConn.BeginTransaction();

		Boolean flag = false;
		try
		{
		   MySqlCommand sqlcommand = null;
			for (int i=0;i<= sqlList.Count;i++)
			{
				sqlcommand = new MySqlCommand(sqlList[i], SqlConn);
				sqlcommand.ExecuteNonQuery();
			}

			 tran.Commit();
			flag = true;
		 }
		catch(Exception e)
		{
			 tran.Rollback();
			 flag = false; 
		}
		finally
		{ 
		   //事务要么回滚要么提交,即Rollback()与Commit()只能执行一个
			 DBClose();
		}  
		return flag; 
}

完整代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace Restful.db
{
    class MySqlHelper
    {
        //链接字符串
        public static String connetStr = "server=127.0.0.1;port=3306;user=root;password=root; database=test;";
        
        //数据库链接
        public MySqlConnection SqlConn = new MySqlConnection(connetStr);
        
        public MySqlHelper()
        {
            DBConnection();
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(true);
        }

        protected void Dispose(bool disposing)
        {
            if (disposing)
            {
                return;
            }
            if (SqlConn != null)
            {
                SqlConn.Dispose();
                SqlConn = null;
            }

        }

        /****
         * 开启数据库链接
         * 
         */
        public void DBConnection()
        {
            //确认是否已打开连接,为打开则打开连接
            if (this.SqlConn.State != ConnectionState.Open)
            {
                try
                {
                    SqlConn.Open(); 
                }catch(Exception e)
                {

                }
            }
        }

        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        public void DBClose()
        {
            //确认是否已打开连接,为打开则打开连接
            if (this.SqlConn.State == ConnectionState.Open)
            {
                SqlConn.Close();
            }
        }

        /// <summary>
        /// 获得查询结果 返回DataTable
        /// </summary>
        /// <param name="sqlstr">SQL字符串</param>
        /// <returns></returns>
        public DataTable QuerySql(string sql)
        {
            DataTable dt = new DataTable();  
            MySqlDataAdapter mysqlData = new MySqlDataAdapter(sql,SqlConn);
            mysqlData.Fill(dt); 
            return dt;
        }

        /// <summary>
        /// 获得查询结果 返回字符串
        /// </summary>
        /// <param name="sqlstr">SQL字符串</param>
        /// <returns></returns>
        public string QueryForString(string sql)
        {
         
             MySqlCommand cmd = new MySqlCommand(sql, SqlConn);
            //执行查询,并返回查询结果集中第一行的第一列。所有其他的列和行将被忽略。select语句无记录返回时,ExecuteScalar()返回NULL值
            Object result = cmd.ExecuteScalar();  
            return result.ToString();
        }

        /// <summary>
        /// 获得查询结果 返回int
        /// </summary>
        /// <param name="sqlstr">SQL字符串</param>
        /// <returns></returns>
        public int QueryForInt(string sql)
        { 
            MySqlCommand cmd = new MySqlCommand(sql, SqlConn);
            //执行查询,并返回查询结果集中第一行的第一列。所有其他的列和行将被忽略。select语句无记录返回时,ExecuteScalar()返回NULL值
            Object result = cmd.ExecuteScalar();
            int count = 0;
            if (result != null)
            {
                count = int.Parse(result.ToString());
            }
           
            return count;
        }

        /// <summary>
        /// 操作数据库(无返回值) 单条sql执行
        /// </summary>
        /// <param name="sqlstr">操作SQL字符串</param>
        public bool ExecuteNonQuerySQL(string sql)
        {
            Boolean flag = false;
            try
            {
                //确认是否已打开连接,为打开则打开连接
                DBConnection();

                MySqlCommand sqlcommand = new MySqlCommand(sql, SqlConn);
                sqlcommand.ExecuteNonQuery();
                flag= true;
            }
            catch (SqlException ex)
            {
                //Console.WriteLine(ex.Message);
                flag= false;
            }
            finally
            {
                DBClose();
            }
            return flag;
        }

        /// <summary>
        /// 操作数据库(无返回值) 多条sql执行 引入事务概念
        /// </summary>
        /// <param name="sqlstr">操作SQL字符串</param>
        public bool ExecuteNonQuerySQLBatch(List<string> sqlList)
        {
            
                //确认是否已打开连接,为打开则打开连接
                DBConnection();

                //事务必须在try外面赋值不然catch里的transaction会报错:未赋值
                MySqlTransaction tran= SqlConn.BeginTransaction();

                Boolean flag = false;
                try
                {
                   MySqlCommand sqlcommand = null;
                    for (int i=0;i<= sqlList.Count;i++)
                    {
                        sqlcommand = new MySqlCommand(sqlList[i], SqlConn);
                        sqlcommand.ExecuteNonQuery();
                    }

                     tran.Commit();
                    flag = true;
                 }
                catch(Exception e)
                {
                     tran.Rollback();
                     flag = false; 
                }
                finally
                { 
                   //事务要么回滚要么提交,即Rollback()与Commit()只能执行一个
                     DBClose();
                }  
                return flag; 
        }
    }
}

代码整理出来仅作为记录,欢迎大神提出改进意见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值