C#写一套最全的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<T> ExecuteQuery<T>(string sql, Func<IDataRecord, T> 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<T> list = new List<T>();
while (reader.Read())
{
list.Add(selector(reader));
}
return list;
}
}
}
} // 向数据库中插入数据
public int Insert(string tableName, Dictionary<string, object> data)
{
string[] columns = new string[data.Count];
object[] values = new object[data.Count]; int i = 0;
foreach (KeyValuePair<string, object> 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<string, object> data, string whereClause = "")
{
string[] setValues = new string[data.Count];
int i = 0;
foreach (KeyValuePair<string, object> 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<string, object> data)
{
List<MySqlParameter> parameters = new List<MySqlParameter>(); foreach (KeyValuePair<string, object> 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<MyClass> list = mySQLHelper.ExecuteQuery("SELECT * FROM myTable", r => new MyClass
{
Column1 = r["column1"].ToString(),
Column2 = int.Parse(r["column2"].ToString())
}); // 插入数据
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("column1", "value1");
data.Add("column2", 123);
int result = mySQLHelper.Insert("myTable", data); // 更新数据
Dictionary<string, object> data = new Dictionary<string, object>();
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类来支持参数化查询。
C#写一套最全的MySQL帮助类(包括增删改查)的更多相关文章
- MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型
一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...
- Vc数据库编程基础MySql数据库的表增删改查数据
Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...
- python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查
python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...
- 使用 NodeJS+Express+MySQL 实现简单的增删改查
关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...
- mysql 的基本操作总结--增删改查
本文只是总结一下mysql 的基本操作,增删改查,以便忘记的时候可以查询一下 1.创建数据库 语法:CREATE DATABASES 数据库名; 例子: CREATE DATABASES studen ...
- Mysql数据表的增删改查
---恢复内容开始--- Mysql数据表的增删改查 1.创建表 语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- 02 . Mysql基础操作及增删改查
SQL简介 SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,SQL语言由IBM开发. SQL语句四大 ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
- Node.js + MySQL 实现数据的增删改查
通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...
随机推荐
- CNN_LSTM
1.keras/examples at master · keras-team/keras · GitHubhttps://github.com/keras-team/keras/tree/maste ...
- nuxtjs项目空白路由强跳到首页
1.根目录下新建middleware文件夹并新建文件unknownRoute.js,代码如下 /** * 未知路由重定向 到首页 */ export default ({store, route, r ...
- Lua元表应用举例:配置表格转为Lua配置表
把配置表格.xlsx数据转为Lua配置表,其实就是把表格数据用Lua写一遍,这里的实现重点就是setmetatable设置元表. 以下以表格student_info.xlsx举例,展示对应Lua配置表 ...
- 转载:谷歌浏览器一些https打不开点击高级不行的解决办法
转载:https://blog.51cto.com/u_15275035/2925642 关于谷歌浏览器一些https网站打不开点击高级不行的解决办法有些url,在谷歌浏览器上打不开,点击高级也没有继 ...
- 配置git到码云
一.安装完git之后,对项目文件点击右键选择Git Base Here #Git 全局设置用户名与邮箱 git config --global user.name "" git c ...
- java xml转为json的两种方法
java xml转为json的两种方法 <?xml version="1.0" encoding="utf-8" ?><auibinsuran ...
- TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
距离上次学Python写的Python实现简单聊天室已经过去好久了,现在学c++又写了一遍,其实过程差不多,无非是语法的变化,目前仅实现最简单的一对一的通信,然后改就是了,接下来应该是多线程了,话不多 ...
- IDEA下Maven项目中通过JDBC连接MySQL数据库
### 1. 在当前Maven项目的pom.xml文件中导入数据库依赖: ```<dependency> <groupId>mysql</groupId> < ...
- 脏牛-Linux内核提权
漏洞范围 下载地址:https://github.com/FireFart/dirtycow 有一点可以在意,dirty.c内置在了kali中,使用命令searchsploit dirty可以搜索 也 ...
- 分布式搜索-elasticsearch
学习黑马- SpringCloud微服务技术栈项目的分布式搜索章节自行整理的笔记,方便日后的重构. 项目涉及技术 知识点是按照集数依次整理,方便日后回来查找. 考虑到不是固定的联网方式,时而WiFi, ...