C#連接MySQL數(shù)據(jù)庫的方法步驟
一、需求
C# 使用 MySQL 數(shù)據(jù)庫的情況還是比較少的,大部分使用 Windows 平臺一般使用 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,也是可以的,下面就會介紹 C# 如何去調(diào)用 MySQL。
二、新建 C# 項(xiàng)目
新建一個(gè)控制臺項(xiàng)目,取名 CSharpConnectMySQL

這里我使用的不使用頂級語句

項(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 來演示好了。

各位可以自己動手操作一下,數(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í)行存儲過程,返回?cái)?shù)據(jù)集
/// </summary>
/// <param name="storedProcName">存儲過程名</param>
/// <param name="parameters">存儲過程參數(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 對象(用來返回一個(gè)結(jié)果集,而不是一個(gè)整數(shù)值)
/// </summary>
/// <param name="connection">數(shù)據(jù)庫連接</param>
/// <param name="storedProcName">存儲過程名</param>
/// <param name="parameters">存儲過程參數(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對象
/// <summary>
/// 裝載MySqlCommand對象
/// </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ù)制別人的
五、測試
代碼
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WinForm實(shí)現(xiàn)窗體最大化并遮蓋任務(wù)欄的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)窗體最大化并遮蓋任務(wù)欄的方法,涉及C#實(shí)現(xiàn)WinForm窗體全屏顯示的實(shí)現(xiàn)及調(diào)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
C# WinForm 登錄界面的圖片驗(yàn)證碼(區(qū)分大小寫+不區(qū)分大小寫)
這篇文章主要介紹了C# WinForm 登錄界面的圖片驗(yàn)證碼(區(qū)分大小寫+不區(qū)分大小寫),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測小工具
這篇文章主要為大家詳細(xì)介紹了如何基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測小工具,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-01-01
C#使用后臺線程BackgroundWorker處理任務(wù)的總結(jié)
這篇文章主要介紹了C#使用后臺線程BackgroundWorker處理任務(wù)的總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
C#中Override關(guān)鍵字和New關(guān)鍵字的用法詳解
這篇文章主要介紹了C#中Override關(guān)鍵字和New關(guān)鍵字的用法,需要的朋友可以參考下2016-01-01
Stream.Write 與 StreamWriter.Write 的不同
Stream.Write 與 StreamWriter.Write 是我們在向流中寫數(shù)據(jù)時(shí),最常用的方法。下面就詳細(xì)講解這兩個(gè)方法。2013-04-04

