C#写一套最全的MySQL帮助类(包括增删改查)
目录
一、以下是一个基于C#的MySQL帮助类的示例代码,可以用于连接数据库、执行SQL语句、读取数据等操作:
二、另外,在使用这个帮助类时,需要先创建一个连接字符串,例如
三、然后就可以使用这个帮助类来访问MySQL数据库了。下面是一些示例代码:
介绍说明:
这个帮助类包含了六个主要的方法:
ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。
其中,ExecuteNonQuery用于执行不返回结果集的SQL语句;
ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列;
ExecuteQuery用于执行一个查询,并返回结果集;
ExecuteQuery(泛型)用于执行一个查询,并将结果集映射到一个对象列表;
Insert用于向数据库中插入数据;
Update用于更新数据库中的数据;
Delete用于删除数据库中的数据。
一、以下是一个基于C#的MySQL帮助类的示例代码,可以用于连接数据库、执行SQL语句、读取数据等操作:
using System;using System.Collections.Generic;using System.Data;using MySql.Data.MySqlClient;public class MySQLHelper{ private string connectionString; public MySQLHelper(string connectionString) { this.connectionString = connectionString; } // 执行不返回结果集的SQL语句 public int ExecuteNonQuery(string sql, params MySqlParameter[] parameters) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sql, connection)) { // 添加参数 command.Parameters.AddRange(parameters); // 打开连接 connection.Open(); // 执行SQL语句并返回影响行数 return command.ExecuteNonQuery(); } } } // 执行一个查询,并返回结果集中第一行的第一列 public object ExecuteScalar(string sql, params MySqlParameter[] parameters) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sql, connection)) { // 添加参数 command.Parameters.AddRange(parameters); // 打开连接 connection.Open(); // 执行SQL查询并返回第一行第一列的值 return command.ExecuteScalar(); } } } // 执行一个查询,并返回结果集 public DataTable ExecuteQuery(string sql, params MySqlParameter[] parameters) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sql, connection)) { // 添加参数 command.Parameters.AddRange(parameters); // 打开连接 connection.Open(); // 创建DataAdapter和DataTable对象,并填充数据 using (MySqlDataAdapter adapter = new MySqlDataAdapter(command)) { DataTable dataTable = new DataTable(); adapter.Fill(dataTable); return dataTable; } } } } // 执行一个查询,并将结果集映射到一个对象列表 public List ExecuteQuery(string sql, Func selector, params MySqlParameter[] parameters) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sql, connection)) { // 添加参数 command.Parameters.AddRange(parameters); // 打开连接 connection.Open(); // 创建DataReader对象并读取数据,将每行数据映射到对象并添加到列表中 using (MySqlDataReader reader = command.ExecuteReader()) { List list = new List(); while (reader.Read()) { list.Add(selector(reader)); } return list; } } } } // 向数据库中插入数据 public int Insert(string tableName, Dictionary data) { string[] columns = new string[data.Count]; object[] values = new object[data.Count]; int i = 0; foreach (KeyValuePair item in data) { // 获取列名和值 columns[i] = item.Key; values[i] = item.Value; i++; } string sql = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", tableName, string.Join(",", columns), "@" + string.Join(",@", columns)); // 将Dictionary转换为MySqlParameter数组,并执行SQL语句 return ExecuteNonQuery(sql, ToMySqlParameters(data)); } // 更新数据库中的数据 public int Update(string tableName, Dictionary data, string whereClause = "") { string[] setValues = new string[data.Count]; int i = 0; foreach (KeyValuePair item in data) { // 获取列名和值 setValues[i] = string.Format("{0}=@{0}", item.Key); i++; } string sql = string.Format("UPDATE {0} SET {1}", tableName, string.Join(",", setValues)); if (!string.IsNullOrEmpty(whereClause)) { sql += " WHERE " + whereClause; } // 将Dictionary转换为MySqlParameter数组,并执行SQL语句 return ExecuteNonQuery(sql, ToMySqlParameters(data)); } // 删除数据库中的数据 public int Delete(string tableName, string whereClause = "") { string sql = string.Format("DELETE FROM {0}", tableName); if (!string.IsNullOrEmpty(whereClause)) { sql += " WHERE " + whereClause; } // 执行SQL语句并返回影响 return ExecuteNonQuery(sql); } // 将Dictionary转换为MySqlParameter数组 private MySqlParameter[] ToMySqlParameters(Dictionary data) { List parameters = new List(); foreach (KeyValuePair item in data) { parameters.Add(new MySqlParameter("@" + item.Key, item.Value)); } return parameters.ToArray(); }}
二、另外,在使用这个帮助类时,需要先创建一个连接字符串,例如
string connectionString = "server=localhost;database=myDatabase;uid=myUsername;password=myPassword;";MySQLHelper mySQLHelper = new MySQLHelper(connectionString);
三、然后就可以使用这个帮助类来访问MySQL数据库了。下面是一些示例代码:
// 查询所有数据DataTable dataTable = mySQLHelper.ExecuteQuery("SELECT * FROM myTable");foreach (DataRow row in dataTable.Rows){ Console.WriteLine(row["column1"].ToString());}// 查询单个值object value = mySQLHelper.ExecuteScalar("SELECT COUNT(*) FROM myTable");Console.WriteLine(value.ToString());// 查询并映射到对象列表List list = mySQLHelper.ExecuteQuery("SELECT * FROM myTable", r => new MyClass{ Column1 = r["column1"].ToString(), Column2 = int.Parse(r["column2"].ToString())});// 插入数据Dictionary data = new Dictionary();data.Add("column1", "value1");data.Add("column2", 123);int result = mySQLHelper.Insert("myTable", data);// 更新数据Dictionary data = new Dictionary();data.Add("column1", "value2");data.Add("column2", 456);int result = mySQLHelper.Update("myTable", data, "id=1");// 删除数据int result = mySQLHelper.Delete("myTable", "id=1");
注:这些示例代码展示了如何使用这个帮助类来执行常见的MySQL操作,例如查询、插入、更新和删除数据。请注意,在执行SQL语句时,要避免SQL注入攻击,可以使用参数化查询来确保安全。
四、就上述SQL注入攻击,防范例子:
//是的,使用参数化查询是避免SQL注入攻击的重要方法之一。C#中可以使用MySqlParameter类来创建参数化查询,下面简单介绍一下如何使用MySqlParameter类。//首先,看一个普通的SQL语句: string sql = "SELECT * FROM Users WHERE name='" + userName + "' AND password='" + password + "'";//这个SQL语句接收两个字符串类型的参数:userName和password。但是,如果恶意用户在输入用户名或密码时添加了SQL代码,则可能会导致SQL注入攻击。例如,如果用户输入了以下内容作为密码: a' OR 'a'='a //则生成的SQL语句将变成: SELECT* FROM Users WHERE name='xxx' AND password = 'a' OR 'a'='a'//这个SQL语句将始终返回true,因为'a'='a'是永远成立的,所以用户可以绕过登录验证并访问数据库。//为了避免这种情况发生,我们可以使用MySqlParameter类来创建参数化查询。以下是一个示例: string sql = "SELECT * FROM Users WHERE name=@UserName AND password=@Password"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sql, connection)) { // 创建参数 command.Parameters.Add(new MySqlParameter("@UserName", userName)); command.Parameters.Add(new MySqlParameter("@Password", password));// 打开连接并执行查询 connection.Open(); using (MySqlDataReader reader = command.ExecuteReader()) { // 处理结果集 } } }//在这个示例中,我们使用了 @符号来标记参数名称,并使用MySqlParameter类为每个参数创建实例。这样,即使用户在输入用户名或密码时添加了SQL代码,它也不会影响生成的SQL语句。//总之,使用参数化查询是一个非常重要的安全措施,可以有效预防SQL注入攻击,C#提供了方便易用的MySqlParameter类来支持参数化查询。
来源地址:https://blog.csdn.net/weixin_71742083/article/details/130526469
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341