C#連接MySQL數(shù)據(jù)庫的方法步驟
一、需求
C# 使用 MySQL 數(shù)據(jù)庫的情況還是比較少的,大部分使用 Windows 平臺(tái)一般使用 SQL Server,在兩年前我買過100元一年的學(xué)生服務(wù)器,當(dāng)時(shí)也是買著玩的,裝 MySQL 數(shù)據(jù)庫使用起來就非常卡,也不知道為什么,但 SQL Server 操作起來不但不卡,還非常的流暢,但是 SQL Server 安裝起來比較麻煩,卸載也容易出問題,尤其是盜版系統(tǒng),我在工作中,也出現(xiàn)了幾次 SQL Server 卸載不了的事,我自己電腦用的正版Win10系統(tǒng),從沒出現(xiàn)這種事。MySQL 和 SQL Server 各有自己的優(yōu)點(diǎn),如果非要使用 MySQL,也是可以的,下面就會(huì)介紹 C# 如何去調(diào)用 MySQL。
二、新建 C# 項(xiàng)目
新建一個(gè)控制臺(tái)項(xiàng)目,取名 CSharpConnectMySQL
這里我使用的不使用頂級(jí)語句
項(xiàng)目創(chuàng)建完成后,如下
namespace CSharpConnectMySQL { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } } }
三、MySQL數(shù)據(jù)庫
MySQL 的安裝,可以在百度搜一下,這里就不演示了
下面不搞復(fù)雜的流程,隨便弄點(diǎn)數(shù)據(jù),就以 shop 數(shù)據(jù)庫 中的 goods_type 來演示好了。
各位可以自己動(dòng)手操作一下,數(shù)據(jù)庫和表不一定和我的一樣,在后面的 sql 語句中,自己改下就好了。
四、MySqlHelper
在使用之前,先安裝 MySql.Data 插件
接著安裝 System.Data.SqlClient
這樣就安裝完成了,接下來就是代碼了
MySqlHelper.cs
using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CSharpConnectMySQL { public class MySqlHelper { private static string connstr = "server=127.0.0.1;database=shop;username=root;password=123456;"; #region 執(zhí)行查詢語句,返回MySqlDataReader /// <summary> /// 執(zhí)行查詢語句,返回MySqlDataReader /// </summary> /// <param name="sqlString"></param> /// <returns></returns> public static MySqlDataReader ExecuteReader(string sqlString) { MySqlConnection connection = new MySqlConnection(connstr); MySqlCommand cmd = new MySqlCommand(sqlString, connection); MySqlDataReader myReader = null; try { connection.Open(); myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return myReader; } catch (System.Data.SqlClient.SqlException e) { connection.Close(); throw new Exception(e.Message); } finally { if (myReader == null) { cmd.Dispose(); connection.Close(); } } } #endregion #region 執(zhí)行帶參數(shù)的查詢語句,返回 MySqlDataReader /// <summary> /// 執(zhí)行帶參數(shù)的查詢語句,返回MySqlDataReader /// </summary> /// <param name="sqlString"></param> /// <param name="cmdParms"></param> /// <returns></returns> public static MySqlDataReader ExecuteReader(string sqlString, params MySqlParameter[] cmdParms) { MySqlConnection connection = new MySqlConnection(connstr); MySqlCommand cmd = new MySqlCommand(); MySqlDataReader myReader = null; try { PrepareCommand(cmd, connection, null, sqlString, cmdParms); myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return myReader; } catch (System.Data.SqlClient.SqlException e) { connection.Close(); throw new Exception(e.Message); } finally { if (myReader == null) { cmd.Dispose(); connection.Close(); } } } #endregion #region 執(zhí)行sql語句,返回執(zhí)行行數(shù) /// <summary> /// 執(zhí)行sql語句,返回執(zhí)行行數(shù) /// </summary> /// <param name="sql"></param> /// <returns></returns> public static int ExecuteSql(string sql) { using (MySqlConnection conn = new MySqlConnection(connstr)) { using (MySqlCommand cmd = new MySqlCommand(sql, conn)) { try { conn.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (MySql.Data.MySqlClient.MySqlException e) { conn.Close(); //throw e; Console.WriteLine(e.Message); } finally { cmd.Dispose(); conn.Close(); } } } return -1; } #endregion #region 執(zhí)行帶參數(shù)的sql語句,并返回執(zhí)行行數(shù) /// <summary> /// 執(zhí)行帶參數(shù)的sql語句,并返回執(zhí)行行數(shù) /// </summary> /// <param name="sqlString"></param> /// <param name="cmdParms"></param> /// <returns></returns> public static int ExecuteSql(string sqlString, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connstr)) { using (MySqlCommand cmd = new MySqlCommand()) { try { PrepareCommand(cmd, connection, null, sqlString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } catch (System.Data.SqlClient.SqlException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } } #endregion #region 執(zhí)行查詢語句,返回DataSet /// <summary> /// 執(zhí)行查詢語句,返回DataSet /// </summary> /// <param name="sql"></param> /// <returns></returns> public static DataSet GetDataSet(string sql) { using (MySqlConnection conn = new MySqlConnection(connstr)) { DataSet ds = new DataSet(); try { conn.Open(); MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn); DataAdapter.Fill(ds); } catch (Exception ex) { //throw ex; Console.WriteLine(ex.Message); } finally { conn.Close(); } return ds; } } #endregion #region 執(zhí)行帶參數(shù)的查詢語句,返回DataSet /// <summary> /// 執(zhí)行帶參數(shù)的查詢語句,返回DataSet /// </summary> /// <param name="sqlString"></param> /// <param name="cmdParms"></param> /// <returns></returns> public static DataSet GetDataSet(string sqlString, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connstr)) { MySqlCommand cmd = new MySqlCommand(); PrepareCommand(cmd, connection, null, sqlString, cmdParms); using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) { DataSet ds = new DataSet(); try { da.Fill(ds, "ds"); cmd.Parameters.Clear(); } catch (System.Data.SqlClient.SqlException ex) { throw new Exception(ex.Message); } finally { cmd.Dispose(); connection.Close(); } return ds; } } } #endregion #region 執(zhí)行帶參數(shù)的sql語句,并返回 object /// <summary> /// 執(zhí)行帶參數(shù)的sql語句,并返回object /// </summary> /// <param name="sqlString"></param> /// <param name="cmdParms"></param> /// <returns></returns> public static object GetSingle(string sqlString, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connstr)) { using (MySqlCommand cmd = new MySqlCommand()) { try { PrepareCommand(cmd, connection, null, sqlString, cmdParms); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (System.Data.SqlClient.SqlException e) { throw new Exception(e.Message); } finally { cmd.Dispose(); connection.Close(); } } } } #endregion /// <summary> /// 執(zhí)行存儲(chǔ)過程,返回?cái)?shù)據(jù)集 /// </summary> /// <param name="storedProcName">存儲(chǔ)過程名</param> /// <param name="parameters">存儲(chǔ)過程參數(shù)</param> /// <returns>DataSet</returns> public static DataSet RunProcedureForDataSet(string storedProcName, IDataParameter[] parameters) { using (MySqlConnection connection = new MySqlConnection(connstr)) { DataSet dataSet = new DataSet(); connection.Open(); MySqlDataAdapter sqlDA = new MySqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet); connection.Close(); return dataSet; } } /// <summary> /// 構(gòu)建 SqlCommand 對(duì)象(用來返回一個(gè)結(jié)果集,而不是一個(gè)整數(shù)值) /// </summary> /// <param name="connection">數(shù)據(jù)庫連接</param> /// <param name="storedProcName">存儲(chǔ)過程名</param> /// <param name="parameters">存儲(chǔ)過程參數(shù)</param> /// <returns>SqlCommand</returns> private static MySqlCommand BuildQueryCommand(MySqlConnection connection, string storedProcName, IDataParameter[] parameters) { MySqlCommand command = new MySqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (MySqlParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; } #region 裝載MySqlCommand對(duì)象 /// <summary> /// 裝載MySqlCommand對(duì)象 /// </summary> private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, 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 = CommandType.Text; //cmdType; if (cmdParms != null) { foreach (MySqlParameter parm in cmdParms) { cmd.Parameters.Add(parm); } } } #endregion } }
connstr 中的配置,根據(jù)個(gè)人的設(shè)置來,也可以寫配置文件中。
MySqlHelper 代碼基本功能都有,代碼不是我寫的,我也是復(fù)制別人的
五、測(cè)試
代碼
using System.Data; namespace CSharpConnectMySQL { internal class Program { static void Main(string[] args) { string sql = "SELECT * FROM goods_type"; DataSet dataSet = MySqlHelper.GetDataSet(sql); DataTable dt = dataSet.Tables[0]; if(dt.Rows.Count > 0) { //打印所有列名 string columnName = string.Empty; for (int i = 0; i < dt.Columns.Count; i++) { columnName += dt.Columns[i].ColumnName + " | "; } Console.WriteLine(columnName); Console.WriteLine("-------------------------"); //打印每一行的數(shù)據(jù) foreach (DataRow row in dt.Rows) { string columnStr = string.Empty; foreach (DataColumn column in dt.Columns) { columnStr += row[column] + " | "; } Console.WriteLine(columnStr); } } Console.ReadKey(); } } }
運(yùn)行:
這樣就 O拉個(gè)K
總結(jié)
到此這篇關(guān)于C#連接MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)C#連接MySQL數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#簡(jiǎn)易圖片格式轉(zhuǎn)換器實(shí)現(xiàn)方法
這篇文章主要介紹了C#簡(jiǎn)易圖片格式轉(zhuǎn)換器實(shí)現(xiàn)方法,涉及C#基于WinForm操作圖片的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-1112306奇葩驗(yàn)證碼引發(fā)思考之C#實(shí)現(xiàn)驗(yàn)證碼程序
春運(yùn)最高峰來了!明天通過網(wǎng)絡(luò)將能買到小年夜的車票,本周四就將開售除夕日車票,但不少人被首次在春運(yùn)期間使用的圖片驗(yàn)證碼搞得很火大,小編也正在對(duì)驗(yàn)證碼進(jìn)行研究,編寫了由C#實(shí)現(xiàn)驗(yàn)證碼程序,分享給大家2015-12-12c#創(chuàng)建圓形類Circle、矩形類實(shí)現(xiàn)代碼
這篇文章主要介紹了c#創(chuàng)建圓形類Circle實(shí)現(xiàn)代碼,其中包括set,get方法,需要的朋友可以參考下2020-11-11C#設(shè)計(jì)模式之Template模板方法模式實(shí)現(xiàn)ASP.NET自定義控件 密碼強(qiáng)度檢測(cè)功能
這篇文章主要介紹了C#設(shè)計(jì)模式之Template模板方法模式實(shí)現(xiàn)ASP.NET自定義控件 密碼強(qiáng)度檢測(cè)功能,簡(jiǎn)單介紹了模板方法模式的定義、原理及檢測(cè)密碼強(qiáng)度的相關(guān)使用技巧,需要的朋友可以參考下2017-09-09C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法
這篇文章主要給大家介紹了關(guān)于C#調(diào)用百度API實(shí)現(xiàn)活體檢測(cè)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09