C#中的MySqlHelper工具類及使用方法


工具類#

工具類轉自C# MysqlHelper C#連接mysql數據庫類庫全,代碼如下:

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

namespace ConsoleApp
{
    public class MySqlHelper
    {         
        /// <summary> 
        /// 獲取一個有效的數據庫連接對象 
        /// </summary> 
        /// <returns></returns> 
        public static MySqlConnection GetConnection(string connSting)
        {
            MySqlConnection Connection = new MySqlConnection(connSting);
            return Connection;
        }
        
        /// <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 cmd = new MySqlCommand();
            MySqlConnection conn = new MySqlConnection(connectionString);
            try
            {                
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);                
                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 cmd = new MySqlCommand();           
            MySqlConnection conn = new MySqlConnection(connectionString);
            try
            {               
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);               
                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>
        ///<param name="connectionString">一個有效的連接字符串</param> 
        /// <param name="cmdType">命令類型(存儲過程, 文本, 等等)</param> 
        /// <param name="cmdText">存儲過程名稱或者sql命令語句</param> 
        /// <param name="commandParameters">執行命令所用參數的集合</param> 
        public static DataTable GetDataTable(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
        {
            MySqlCommand cmd = new MySqlCommand();            
            MySqlConnection conn = new MySqlConnection(connectionString);
            try
            {                
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);               
                MySqlDataAdapter adapter = new MySqlDataAdapter();
                adapter.SelectCommand = cmd;
                DataTable ds = new DataTable();

                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>
        /// 返回插入值ID
        /// </summary>
        /// <param name="connectionString"></param>
        /// <param name="cmdType"></param>
        /// <param name="cmdText"></param>
        /// <param name="commandParameters"></param>
        /// <returns></returns>
        public static object ExecuteNonExist(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.ExecuteNonQuery();

                return cmd.LastInsertedId;
            }
        }

        /// <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="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);
            }
        }

       
    }
}

使用方法#

這里只列舉了常規的建庫、建表、增刪改查操作,代碼如下:

using MySql.Data.MySqlClient;
using System;
using System.Data;
using System.Text;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //建庫 
            string connSting = "Data Source=localhost;Persist Security Info=yes; UserId=root; PWD=root;";
            string cmdText = "CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;";
            MySqlConnection conn = MySqlHelper.GetConnection(connSting);
            int val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText);
            Console.WriteLine("影響行數:"+ val);

            //建表
            connSting = "server=localhost;Database='test';User='root';Password='root';charset='utf8';pooling=false;SslMode=none";
            StringBuilder sbr = new StringBuilder();
            sbr.Append("CREATE TABLE IF NOT EXISTS `test_table`(");
            sbr.Append("`id` INT UNSIGNED AUTO_INCREMENT,");
            sbr.Append("`name` VARCHAR(100) NOT NULL,");
            sbr.Append("`password` VARCHAR(40) NOT NULL,");
            sbr.Append("`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',");
            sbr.Append("`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',");
            sbr.Append("PRIMARY KEY( `id` ));");
            cmdText = sbr.ToString();
            conn = MySqlHelper.GetConnection(connSting);
            val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText);
            Console.WriteLine("影響行數:" + val);

            //增
            sbr.Clear();
            sbr.Append("INSERT INTO test_table (name,password) VALUES ");
            sbr.Append("(11,111), ");
            sbr.Append("(12,222); ");
            cmdText = sbr.ToString();
            val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText);
            Console.WriteLine("影響行數:" + val);

            //刪
            sbr.Clear();
            sbr.Append("DELETE FROM test_table ");
            sbr.Append("WHERE id=1;");           
            cmdText = sbr.ToString();
            val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText);
            Console.WriteLine("影響行數:" + val);

            //改
            sbr.Clear();
            sbr.Append("UPDATE test_table SET ");
            sbr.Append("name='13', ");
            sbr.Append("password='333' ");
            sbr.Append("WHERE id=@id;");
            cmdText = sbr.ToString();
            MySqlParameter idParm = new MySqlParameter("@id", 2);
            val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText, idParm);
            Console.WriteLine("影響行數:" + val);

            //查
            sbr.Clear();
            sbr.Append("SELECT name,password FROM test_table ");
            sbr.Append("WHERE id=@id;");
            cmdText = sbr.ToString();
            DataTable dt= MySqlHelper.GetDataTable(connSting,CommandType.Text,cmdText, idParm);
            Console.WriteLine("結果行數:" + dt.Rows.Count);


            //測試Parameters.Clear()的作用
            string sqlInsert = "INSERT INTO test_table (name,password) VALUES ( @name ,1233);";
            string sqlSelect = "SELECT * FROM test_table WHERE name=@name;";
            MySqlParameter parms = new MySqlParameter("@name", "testName");
            MySqlHelper.ExecuteNonQuery(connSting, CommandType.Text, sqlInsert, parms);
            MySqlHelper.ExecuteNonQuery(connSting, CommandType.Text, sqlSelect, parms);

            //刪除表
            sbr.Clear();
            sbr.Append("DROP TABLE test_table;");
            cmdText = sbr.ToString();
            val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText);
            Console.WriteLine("影響行數:" + val);

            //刪除數據庫
            connSting = "Data Source=localhost;Persist Security Info=yes; UserId=root; PWD=root;";
            cmdText = "DROP DATABASE test;";
            val = MySqlHelper.ExecuteNonQuery(conn, CommandType.Text, cmdText);
            Console.WriteLine("影響行數:" + val);

            Console.ReadKey();
        }
        
    }
}

關於cmd.Parameters.Clear()的作用,我沒測出什么結果,有沒有都一樣。參考cmd.Parameters.Clear() 語句的作用這篇文章,我懷疑問題只存在微軟的Sql數據庫中。

參考資料#

MySql-8.0.23-winx64 dll 提取碼:zloa
C#連接MySQL數據庫,並建庫、建表
C# MysqlHelper C#連接mysql數據庫類庫全
MySQL 教程

 

 

出處:https://www.cnblogs.com/timefiles/p/CsharpMySqlHelper.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM