MySQL 执行原生sql
2024-10-02 01:15:12
public class MySqlHelper
{
private YourContext _context;
public MySqlHelper(YourContext context)
{
_context = context;
}
/// <summary>
/// 查询列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <returns></returns>
public List<T> QueryForDatable<T>(string sql)
{
string conn= _context.Database.Connection.ConnectionString;
using(var connection= new MySqlConnection(conn))
{
MySqlCommand cmd = new MySqlCommand(sql, connection);
//需要open才能执行Command
connection.Open();
using (MySqlDataReader reader = cmd.ExecuteReader())
{
List<T> data = DataReaderMapToList<T>(reader);
connection.Close();
return data;
}
}
}
/// <summary>
/// 查询数量
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int QueryForCount(string sql)
{
string conn = _context.Database.Connection.ConnectionString;
using (var connection = new MySqlConnection(conn))
{
MySqlCommand cmd = new MySqlCommand(sql, connection);
connection.Open();
//只取第一行第一个结果
Object result = cmd.ExecuteScalar();
if (result != null)
{
int count = int.Parse(result.ToString());
connection.Close();
return count;
}
connection.Close();
return 0;
}
}
public static List<T> DataReaderMapToList<T>(IDataReader dr)
{
List<T> list = new List<T>();
T obj = default(T);
List<string> columnNames = new List<string>();
//查询DataReader里面的列名集合
for (var f = 0; f < dr.FieldCount; f++)
{
columnNames.Add(dr.GetName(f));
}
while (dr.Read())
{
obj = Activator.CreateInstance<T>();
foreach (PropertyInfo prop in obj.GetType().GetProperties())
{
//判断列名是否存在
var columnName = columnNames.Find(x => x == prop.Name);
if (!string.IsNullOrEmpty(columnName))
{
prop.SetValue(obj, dr[prop.Name]);
}
}
list.Add(obj);
}
return list;
}
}
最新文章
- 【.NET深呼吸】基于异步上下文的本地变量(AsyncLocal)
- 20161022 NOIP模拟赛 解题报告
- css常用代码
- JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)
- StatisticalOutlierRemoval源码
- 我没发现Mvc里的 web.config 有什么用。
- 用PHP语言做网站常见漏洞有哪些?
- 英语中的 姓氏/Surname
- Oracle 插入数据
- Keil编译后的各文件介绍
- Linux入门基础 #6:Linux用户基础
- Oracle查询速度慢的原因总结
- Apache + PHP in Windows XP (to add SQLite)
- synchronized的4种用法
- 怎样给Win7系统设置一个默认的浏览器
- C# winform页面可视化设计打开失败,提示未能加载程序集或他的一个依赖项,dll错误
- SpriteBuilder中pivot关节中的Collide bodies属性
- docker(三)容器的基本操作
- Template literals
- 编写简易的JS输入框模糊查询匹配(附有源码和demo)