当前位置:   article > 正文

C#写一套最全的MySQL帮助类(包括增删改查)_c# mysqlhelper类

c# mysqlhelper类

目录

一、以下是一个基于C#的MySQL帮助类的示例代码,可以用于连接数据库、执行SQL语句、读取数据等操作:

二、另外,在使用这个帮助类时,需要先创建一个连接字符串,例如

三、然后就可以使用这个帮助类来访问MySQL数据库了。下面是一些示例代码:

四、就上述SQL注入攻击,防范例子:

介绍说明:
这个帮助类包含了六个主要的方法:
ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。
其中,ExecuteNonQuery用于执行不返回结果集的SQL语句;
ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列;
ExecuteQuery用于执行一个查询,并返回结果集;
ExecuteQuery(泛型)用于执行一个查询,并将结果集映射到一个对象列表;
Insert用于向数据库中插入数据;
Update用于更新数据库中的数据;
Delete用于删除数据库中的数据。

一、以下是一个基于C#的MySQL帮助类的示例代码,可以用于连接数据库、执行SQL语句、读取数据等操作:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using MySql.Data.MySqlClient;
  5. public class MySQLHelper
  6. {
  7. private string connectionString;
  8. public MySQLHelper(string connectionString)
  9. {
  10. this.connectionString = connectionString;
  11. }
  12. // 执行不返回结果集的SQL语句
  13. public int ExecuteNonQuery(string sql, params MySqlParameter[] parameters)
  14. {
  15. using (MySqlConnection connection = new MySqlConnection(connectionString))
  16. {
  17. using (MySqlCommand command = new MySqlCommand(sql, connection))
  18. {
  19. // 添加参数
  20. command.Parameters.AddRange(parameters);
  21. // 打开连接
  22. connection.Open();
  23. // 执行SQL语句并返回影响行数
  24. return command.ExecuteNonQuery();
  25. }
  26. }
  27. }
  28. // 执行一个查询,并返回结果集中第一行的第一列
  29. public object ExecuteScalar(string sql, params MySqlParameter[] parameters)
  30. {
  31. using (MySqlConnection connection = new MySqlConnection(connectionString))
  32. {
  33. using (MySqlCommand command = new MySqlCommand(sql, connection))
  34. {
  35. // 添加参数
  36. command.Parameters.AddRange(parameters);
  37. // 打开连接
  38. connection.Open();
  39. // 执行SQL查询并返回第一行第一列的值
  40. return command.ExecuteScalar();
  41. }
  42. }
  43. }
  44. // 执行一个查询,并返回结果集
  45. public DataTable ExecuteQuery(string sql, params MySqlParameter[] parameters)
  46. {
  47. using (MySqlConnection connection = new MySqlConnection(connectionString))
  48. {
  49. using (MySqlCommand command = new MySqlCommand(sql, connection))
  50. {
  51. // 添加参数
  52. command.Parameters.AddRange(parameters);
  53. // 打开连接
  54. connection.Open();
  55. // 创建DataAdapter和DataTable对象,并填充数据
  56. using (MySqlDataAdapter adapter = new MySqlDataAdapter(command))
  57. {
  58. DataTable dataTable = new DataTable();
  59. adapter.Fill(dataTable);
  60. return dataTable;
  61. }
  62. }
  63. }
  64. }
  65. // 执行一个查询,并将结果集映射到一个对象列表
  66. public List<T> ExecuteQuery<T>(string sql, Func<IDataRecord, T> selector, params MySqlParameter[] parameters)
  67. {
  68. using (MySqlConnection connection = new MySqlConnection(connectionString))
  69. {
  70. using (MySqlCommand command = new MySqlCommand(sql, connection))
  71. {
  72. // 添加参数
  73. command.Parameters.AddRange(parameters);
  74. // 打开连接
  75. connection.Open();
  76. // 创建DataReader对象并读取数据,将每行数据映射到对象并添加到列表中
  77. using (MySqlDataReader reader = command.ExecuteReader())
  78. {
  79. List<T> list = new List<T>();
  80. while (reader.Read())
  81. {
  82. list.Add(selector(reader));
  83. }
  84. return list;
  85. }
  86. }
  87. }
  88. }
  89. // 向数据库中插入数据
  90. public int Insert(string tableName, Dictionary<string, object> data)
  91. {
  92. string[] columns = new string[data.Count];
  93. object[] values = new object[data.Count];
  94. int i = 0;
  95. foreach (KeyValuePair<string, object> item in data)
  96. {
  97. // 获取列名和值
  98. columns[i] = item.Key;
  99. values[i] = item.Value;
  100. i++;
  101. }
  102. string sql = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", tableName, string.Join(",", columns), "@" + string.Join(",@", columns));
  103. // 将Dictionary转换为MySqlParameter数组,并执行SQL语句
  104. return ExecuteNonQuery(sql, ToMySqlParameters(data));
  105. }
  106. // 更新数据库中的数据
  107. public int Update(string tableName, Dictionary<string, object> data, string whereClause = "")
  108. {
  109. string[] setValues = new string[data.Count];
  110. int i = 0;
  111. foreach (KeyValuePair<string, object> item in data)
  112. {
  113. // 获取列名和值
  114. setValues[i] = string.Format("{0}=@{0}", item.Key);
  115. i++;
  116. }
  117. string sql = string.Format("UPDATE {0} SET {1}", tableName, string.Join(",", setValues));
  118. if (!string.IsNullOrEmpty(whereClause))
  119. {
  120. sql += " WHERE " + whereClause;
  121. }
  122. // 将Dictionary转换为MySqlParameter数组,并执行SQL语句
  123. return ExecuteNonQuery(sql, ToMySqlParameters(data));
  124. }
  125. // 删除数据库中的数据
  126. public int Delete(string tableName, string whereClause = "")
  127. {
  128. string sql = string.Format("DELETE FROM {0}", tableName);
  129. if (!string.IsNullOrEmpty(whereClause))
  130. {
  131. sql += " WHERE " + whereClause;
  132. }
  133. // 执行SQL语句并返回影响
  134. return ExecuteNonQuery(sql);
  135. }
  136. // 将Dictionary转换为MySqlParameter数组
  137. private MySqlParameter[] ToMySqlParameters(Dictionary<string, object> data)
  138. {
  139. List<MySqlParameter> parameters = new List<MySqlParameter>();
  140. foreach (KeyValuePair<string, object> item in data)
  141. {
  142. parameters.Add(new MySqlParameter("@" + item.Key, item.Value));
  143. }
  144. return parameters.ToArray();
  145. }
  146. }

二、另外,在使用这个帮助类时,需要先创建一个连接字符串,例如

  1. string connectionString = "server=localhost;database=myDatabase;uid=myUsername;password=myPassword;";
  2. MySQLHelper mySQLHelper = new MySQLHelper(connectionString);

三、然后就可以使用这个帮助类来访问MySQL数据库了。下面是一些示例代码:

  1. // 查询所有数据
  2. DataTable dataTable = mySQLHelper.ExecuteQuery("SELECT * FROM myTable");
  3. foreach (DataRow row in dataTable.Rows)
  4. {
  5. Console.WriteLine(row["column1"].ToString());
  6. }
  7. // 查询单个值
  8. object value = mySQLHelper.ExecuteScalar("SELECT COUNT(*) FROM myTable");
  9. Console.WriteLine(value.ToString());
  10. // 查询并映射到对象列表
  11. List<MyClass> list = mySQLHelper.ExecuteQuery("SELECT * FROM myTable", r => new MyClass
  12. {
  13. Column1 = r["column1"].ToString(),
  14. Column2 = int.Parse(r["column2"].ToString())
  15. });
  16. // 插入数据
  17. Dictionary<string, object> data = new Dictionary<string, object>();
  18. data.Add("column1", "value1");
  19. data.Add("column2", 123);
  20. int result = mySQLHelper.Insert("myTable", data);
  21. // 更新数据
  22. Dictionary<string, object> data = new Dictionary<string, object>();
  23. data.Add("column1", "value2");
  24. data.Add("column2", 456);
  25. int result = mySQLHelper.Update("myTable", data, "id=1");
  26. // 删除数据
  27. int result = mySQLHelper.Delete("myTable", "id=1");

 注:这些示例代码展示了如何使用这个帮助类来执行常见的MySQL操作,例如查询、插入、更新和删除数据。请注意,在执行SQL语句时,要避免SQL注入攻击,可以使用参数化查询来确保安全。

四、就上述SQL注入攻击,防范例子:

  1. //是的,使用参数化查询是避免SQL注入攻击的重要方法之一。C#中可以使用MySqlParameter类来创建参数化查询,下面简单介绍一下如何使用MySqlParameter类。
  2. //首先,看一个普通的SQL语句:
  3. string sql = "SELECT * FROM Users WHERE name='" + userName + "' AND password='" + password + "'";
  4. //这个SQL语句接收两个字符串类型的参数:userName和password。但是,如果恶意用户在输入用户名或密码时添加了SQL代码,则可能会导致SQL注入攻击。例如,如果用户输入了以下内容作为密码:
  5. a' OR 'a'='a
  6. //则生成的SQL语句将变成:
  7. SELECT* FROM Users WHERE name='xxx' AND password = 'a' OR 'a'='a'
  8. //这个SQL语句将始终返回true,因为'a'='a'是永远成立的,所以用户可以绕过登录验证并访问数据库。
  9. //为了避免这种情况发生,我们可以使用MySqlParameter类来创建参数化查询。以下是一个示例:
  10. string sql = "SELECT * FROM Users WHERE name=@UserName AND password=@Password";
  11. using (MySqlConnection connection = new MySqlConnection(connectionString))
  12. {
  13. using (MySqlCommand command = new MySqlCommand(sql, connection))
  14. {
  15. // 创建参数
  16. command.Parameters.Add(new MySqlParameter("@UserName", userName));
  17. command.Parameters.Add(new MySqlParameter("@Password", password));
  18. // 打开连接并执行查询
  19. connection.Open();
  20. using (MySqlDataReader reader = command.ExecuteReader())
  21. {
  22. // 处理结果集
  23. }
  24. }
  25. }
  26. //在这个示例中,我们使用了 @符号来标记参数名称,并使用MySqlParameter类为每个参数创建实例。这样,即使用户在输入用户名或密码时添加了SQL代码,它也不会影响生成的SQL语句。
  27. //总之,使用参数化查询是一个非常重要的安全措施,可以有效预防SQL注入攻击,C#提供了方便易用的MySqlParameter类来支持参数化查询。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/486861?site
推荐阅读
相关标签
  

闽ICP备14008679号