• C# 连接 MySQL 数据库


    目录

    一、需求

    二、新建 C# 项目

    三、MySQL数据库

    四、MySqlHelper

    五、测试


    一、需求

    C# 使用 MySQL 数据库的情况还是比较少的,大部分使用 Windows 平台一般使用 SQL Server,在两年前我买过100元一年的学生服务器,当时也是买着玩的,装 MySQL 数据库使用起来就非常卡,也不知道为什么,但 SQL Server 操作起来不但不卡,还非常的流畅,但是 SQL Server 安装起来比较麻烦,卸载也容易出问题,尤其是盗版系统,我在工作中,也出现了几次 SQL Server 卸载不了的事,我自己电脑用的正版Win10系统,从没出现这种事。MySQL 和 SQL Server 各有自己的优点,如果非要使用 MySQL,也是可以的,下面就会介绍 C# 如何去调用 MySQL。

    二、新建 C# 项目

    新建一个控制台项目,取名 CSharpConnectMySQL

    这里我使用的不使用顶级语句

    项目创建完成后,如下

    1. namespace CSharpConnectMySQL
    2. {
    3. internal class Program
    4. {
    5. static void Main(string[] args)
    6. {
    7. Console.WriteLine("Hello, World!");
    8. }
    9. }
    10. }

    三、MySQL数据库

    MySQL 的安装,可以在百度搜一下,这里就不演示了

    下面不搞复杂的流程,随便弄点数据,就以 shop 数据库 中的 goods_type 来演示好了。

    各位可以自己动手操作一下,数据库和表不一定和我的一样,在后面的 sql 语句中,自己改下就好了。 

    四、MySqlHelper

    在使用之前,先安装 MySql.Data 插件

    接着安装 System.Data.SqlClient

    这样就安装完成了,接下来就是代码了

    MySqlHelper.cs

    1. using MySql.Data.MySqlClient;
    2. using System;
    3. using System.Collections.Generic;
    4. using System.Data;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Threading.Tasks;
    8. namespace CSharpConnectMySQL
    9. {
    10. public class MySqlHelper
    11. {
    12. private static string connstr = "server=127.0.0.1;database=shop;username=root;password=123456;";
    13. #region 执行查询语句,返回MySqlDataReader
    14. ///
    15. /// 执行查询语句,返回MySqlDataReader
    16. ///
    17. ///
    18. ///
    19. public static MySqlDataReader ExecuteReader(string sqlString)
    20. {
    21. MySqlConnection connection = new MySqlConnection(connstr);
    22. MySqlCommand cmd = new MySqlCommand(sqlString, connection);
    23. MySqlDataReader myReader = null;
    24. try
    25. {
    26. connection.Open();
    27. myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    28. return myReader;
    29. }
    30. catch (System.Data.SqlClient.SqlException e)
    31. {
    32. connection.Close();
    33. throw new Exception(e.Message);
    34. }
    35. finally
    36. {
    37. if (myReader == null)
    38. {
    39. cmd.Dispose();
    40. connection.Close();
    41. }
    42. }
    43. }
    44. #endregion
    45. #region 执行带参数的查询语句,返回 MySqlDataReader
    46. ///
    47. /// 执行带参数的查询语句,返回MySqlDataReader
    48. ///
    49. ///
    50. ///
    51. ///
    52. public static MySqlDataReader ExecuteReader(string sqlString, params MySqlParameter[] cmdParms)
    53. {
    54. MySqlConnection connection = new MySqlConnection(connstr);
    55. MySqlCommand cmd = new MySqlCommand();
    56. MySqlDataReader myReader = null;
    57. try
    58. {
    59. PrepareCommand(cmd, connection, null, sqlString, cmdParms);
    60. myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    61. cmd.Parameters.Clear();
    62. return myReader;
    63. }
    64. catch (System.Data.SqlClient.SqlException e)
    65. {
    66. connection.Close();
    67. throw new Exception(e.Message);
    68. }
    69. finally
    70. {
    71. if (myReader == null)
    72. {
    73. cmd.Dispose();
    74. connection.Close();
    75. }
    76. }
    77. }
    78. #endregion
    79. #region 执行sql语句,返回执行行数
    80. ///
    81. /// 执行sql语句,返回执行行数
    82. ///
    83. ///
    84. ///
    85. public static int ExecuteSql(string sql)
    86. {
    87. using (MySqlConnection conn = new MySqlConnection(connstr))
    88. {
    89. using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    90. {
    91. try
    92. {
    93. conn.Open();
    94. int rows = cmd.ExecuteNonQuery();
    95. return rows;
    96. }
    97. catch (MySql.Data.MySqlClient.MySqlException e)
    98. {
    99. conn.Close();
    100. //throw e;
    101. Console.WriteLine(e.Message);
    102. }
    103. finally
    104. {
    105. cmd.Dispose();
    106. conn.Close();
    107. }
    108. }
    109. }
    110. return -1;
    111. }
    112. #endregion
    113. #region 执行带参数的sql语句,并返回执行行数
    114. ///
    115. /// 执行带参数的sql语句,并返回执行行数
    116. ///
    117. ///
    118. ///
    119. ///
    120. public static int ExecuteSql(string sqlString, params MySqlParameter[] cmdParms)
    121. {
    122. using (MySqlConnection connection = new MySqlConnection(connstr))
    123. {
    124. using (MySqlCommand cmd = new MySqlCommand())
    125. {
    126. try
    127. {
    128. PrepareCommand(cmd, connection, null, sqlString, cmdParms);
    129. int rows = cmd.ExecuteNonQuery();
    130. cmd.Parameters.Clear();
    131. return rows;
    132. }
    133. catch (System.Data.SqlClient.SqlException E)
    134. {
    135. throw new Exception(E.Message);
    136. }
    137. finally
    138. {
    139. cmd.Dispose();
    140. connection.Close();
    141. }
    142. }
    143. }
    144. }
    145. #endregion
    146. #region 执行查询语句,返回DataSet
    147. ///
    148. /// 执行查询语句,返回DataSet
    149. ///
    150. ///
    151. ///
    152. public static DataSet GetDataSet(string sql)
    153. {
    154. using (MySqlConnection conn = new MySqlConnection(connstr))
    155. {
    156. DataSet ds = new DataSet();
    157. try
    158. {
    159. conn.Open();
    160. MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);
    161. DataAdapter.Fill(ds);
    162. }
    163. catch (Exception ex)
    164. {
    165. //throw ex;
    166. Console.WriteLine(ex.Message);
    167. }
    168. finally
    169. {
    170. conn.Close();
    171. }
    172. return ds;
    173. }
    174. }
    175. #endregion
    176. #region 执行带参数的查询语句,返回DataSet
    177. ///
    178. /// 执行带参数的查询语句,返回DataSet
    179. ///
    180. ///
    181. ///
    182. ///
    183. public static DataSet GetDataSet(string sqlString, params MySqlParameter[] cmdParms)
    184. {
    185. using (MySqlConnection connection = new MySqlConnection(connstr))
    186. {
    187. MySqlCommand cmd = new MySqlCommand();
    188. PrepareCommand(cmd, connection, null, sqlString, cmdParms);
    189. using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
    190. {
    191. DataSet ds = new DataSet();
    192. try
    193. {
    194. da.Fill(ds, "ds");
    195. cmd.Parameters.Clear();
    196. }
    197. catch (System.Data.SqlClient.SqlException ex)
    198. {
    199. throw new Exception(ex.Message);
    200. }
    201. finally
    202. {
    203. cmd.Dispose();
    204. connection.Close();
    205. }
    206. return ds;
    207. }
    208. }
    209. }
    210. #endregion
    211. #region 执行带参数的sql语句,并返回 object
    212. ///
    213. /// 执行带参数的sql语句,并返回object
    214. ///
    215. ///
    216. ///
    217. ///
    218. public static object GetSingle(string sqlString, params MySqlParameter[] cmdParms)
    219. {
    220. using (MySqlConnection connection = new MySqlConnection(connstr))
    221. {
    222. using (MySqlCommand cmd = new MySqlCommand())
    223. {
    224. try
    225. {
    226. PrepareCommand(cmd, connection, null, sqlString, cmdParms);
    227. object obj = cmd.ExecuteScalar();
    228. cmd.Parameters.Clear();
    229. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
    230. {
    231. return null;
    232. }
    233. else
    234. {
    235. return obj;
    236. }
    237. }
    238. catch (System.Data.SqlClient.SqlException e)
    239. {
    240. throw new Exception(e.Message);
    241. }
    242. finally
    243. {
    244. cmd.Dispose();
    245. connection.Close();
    246. }
    247. }
    248. }
    249. }
    250. #endregion
    251. ///
    252. /// 执行存储过程,返回数据集
    253. ///
    254. /// 存储过程名
    255. /// 存储过程参数
    256. /// DataSet
    257. public static DataSet RunProcedureForDataSet(string storedProcName, IDataParameter[] parameters)
    258. {
    259. using (MySqlConnection connection = new MySqlConnection(connstr))
    260. {
    261. DataSet dataSet = new DataSet();
    262. connection.Open();
    263. MySqlDataAdapter sqlDA = new MySqlDataAdapter();
    264. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
    265. sqlDA.Fill(dataSet);
    266. connection.Close();
    267. return dataSet;
    268. }
    269. }
    270. ///
    271. /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
    272. ///
    273. /// 数据库连接
    274. /// 存储过程名
    275. /// 存储过程参数
    276. /// SqlCommand
    277. private static MySqlCommand BuildQueryCommand(MySqlConnection connection, string storedProcName,
    278. IDataParameter[] parameters)
    279. {
    280. MySqlCommand command = new MySqlCommand(storedProcName, connection);
    281. command.CommandType = CommandType.StoredProcedure;
    282. foreach (MySqlParameter parameter in parameters)
    283. {
    284. command.Parameters.Add(parameter);
    285. }
    286. return command;
    287. }
    288. #region 装载MySqlCommand对象
    289. ///
    290. /// 装载MySqlCommand对象
    291. ///
    292. private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText,
    293. MySqlParameter[] cmdParms)
    294. {
    295. if (conn.State != ConnectionState.Open)
    296. {
    297. conn.Open();
    298. }
    299. cmd.Connection = conn;
    300. cmd.CommandText = cmdText;
    301. if (trans != null)
    302. {
    303. cmd.Transaction = trans;
    304. }
    305. cmd.CommandType = CommandType.Text; //cmdType;
    306. if (cmdParms != null)
    307. {
    308. foreach (MySqlParameter parm in cmdParms)
    309. {
    310. cmd.Parameters.Add(parm);
    311. }
    312. }
    313. }
    314. #endregion
    315. }
    316. }

    connstr 中的配置,根据个人的设置来,也可以写配置文件中。

    MySqlHelper 代码基本功能都有,代码不是我写的,我也是复制别人的

    五、测试

    代码

    1. using System.Data;
    2. namespace CSharpConnectMySQL
    3. {
    4. internal class Program
    5. {
    6. static void Main(string[] args)
    7. {
    8. string sql = "SELECT * FROM goods_type";
    9. DataSet dataSet = MySqlHelper.GetDataSet(sql);
    10. DataTable dt = dataSet.Tables[0];
    11. if(dt.Rows.Count > 0)
    12. {
    13. //打印所有列名
    14. string columnName = string.Empty;
    15. for (int i = 0; i < dt.Columns.Count; i++)
    16. {
    17. columnName += dt.Columns[i].ColumnName + " | ";
    18. }
    19. Console.WriteLine(columnName);
    20. Console.WriteLine("-------------------------");
    21. //打印每一行的数据
    22. foreach (DataRow row in dt.Rows)
    23. {
    24. string columnStr = string.Empty;
    25. foreach (DataColumn column in dt.Columns)
    26. {
    27. columnStr += row[column] + " | ";
    28. }
    29. Console.WriteLine(columnStr);
    30. }
    31. }
    32. Console.ReadKey();
    33. }
    34. }
    35. }

    运行:

    这样就 O拉个K

    end

  • 相关阅读:
    java初学
    基于四旋翼无人机的PD控制研究(Matlab代码实现)
    day58
    AHB、AXI、APB
    简易实现QT中的virtualkeyboard及问题总结
    【Docker】Python Flask + Redis 练习
    【连通性的初步分析】
    Word处理控件Aspose.Words功能演示:在Word文档中创建可填充表单
    css设置z-index为无穷大
    C++ Reference: Standard C++ Library reference: C Library: cwchar: wcrtomb
  • 原文地址:https://blog.csdn.net/qq_38693757/article/details/127318838