参考:https://www.cnblogs.com/atomy/p/12784361.html
Dapper存储过程:http://t.zoukankan.com/mengshi-p-4784640.html
Dapper存储过程:http://t.zoukankan.com/mengshi-p-4784640.html
using Dapper; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; namespace DapperTest.Models { public class StudentsService { private const string connectionString = "Data Source=.;Initial Catalog=efcoretest;Persist Security Info=True;User ID=sa;Password=111111"; //单个插入 public static int Insert(Students model) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("insert into Students(LastName,FirstMidName,EnrollmentDate) values(@LastName,@FirstMidName,@EnrollmentDate)", model); } } //批量插入 public static int Insert(List<Students> models) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("insert into Students(LastName,FirstMidName,EnrollmentDate) values(@LastName,@FirstMidName,@EnrollmentDate)", models); } } //单个删除 public static int Delete(Students para) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("delete from Students where ID=@ID", para); } } //批量删除 public static int Delete(List<Students> paras) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("delete from Students where ID=@ID", paras); } } //单个修改(事务) public static int Update(Students para) { using (IDbConnection connection = new SqlConnection(connectionString)) { IDbTransaction dbTransaction = connection.BeginTransaction(); try { int res = connection.Execute("update Students set LastName=@LastName where ID=@ID", para, dbTransaction); dbTransaction.Commit(); return res; } catch (System.Exception) { dbTransaction.Rollback(); } return -1; } } //批量修改 public static int Update(List<Students> paras) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("update Students set LastName=@LastName where ID=@ID", paras); } } //无参查询所有数据 public static List<Students> Query() { using (IDbConnection connection = new SqlConnection(connectionString)) { //WHERE LastName like CONCAT('%',@LastName,'%') return connection.Query<Students>("select * from Students").ToList(); } } //查询指定数据 public static Students Query(Students para) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Query<Students>("select * from Students where ID=@ID", para).SingleOrDefault(); } } //In操作 public static List<Students> QueryIn() { using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = "select * from Students where id in @ids"; //参数类型是Array的时候,dappper会自动将其转化 return connection.Query<Students>(sql, new { ids = new int[2] { 1, 2 } }).ToList(); } } public static List<Students> QueryIn(int[] ids) { using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = "select * from Person where id in @ids"; //参数类型是Array的时候,dappper会自动将其转化 return connection.Query<Students>(sql, new { ids }).ToList(); } } //多语句操作 public static StudentAndCourseDto QueryMultiple() { StudentAndCourseDto dto = new StudentAndCourseDto(); using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = "select * from Students; select * from Courses"; using (var multiReader = connection.QueryMultiple(sql)) { var studentsList = multiReader.Read<Students>().ToList(); var coursesList = multiReader.Read<Courses>().ToList(); dto.CourseList = coursesList; dto.StudentList = studentsList; return dto; } } } /// <summary> /// 其中,Query的三个泛型参数分别是委托回调类型1,委托回调类型2,返回类型。 /// 形参的三个参数分别是sql语句,map委托,对象参数。 /// 所以整句的意思是先根据sql语句查询; /// 同时把查询的person信息赋值给bookWithPerson.Pers,并且返回bookWithPerson; /// book是对象参数,提供参数绑定的值。最终整个方法返回BookWithPerson,这样我们所需要的所有信息就有了。 /// </summary> /// <param name="book"></param> /// <returns></returns> public static BookWithPerson QueryJoin(Book book) { using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = @"select b.id,b.bookName,p.id,p.name,p.remark from Person as p join Book as b on p.id = b.personId where b.id = @id;"; var result = connection.Query<BookWithPerson, Person, BookWithPerson>(sql, (bookWithPerson, person) => { bookWithPerson.Pers = person; return bookWithPerson; }, book, splitOn: "bookName"); return (BookWithPerson)result; } } } }
Dapper存储过程1
public List<Role> ExecuteStoredProcedureNoParms() { using (IDbConnection connection = new SqlConnection(connectionString)) { List<Role> roleList = new List<Role>(); roleList = connection.Query<Role>("QueryRoleNoParms", null, null, true, null, CommandType.StoredProcedure).ToList(); return roleList; } }
Dapper存储过程2 输入输出参数
public string ExecuteStoredProcedureWithParms() { DynamicParameters dp = new DynamicParameters(); dp.Add("@RoleId", "1"); dp.Add("@RoleName", "", DbType.String, ParameterDirection.Output); using (IDbConnection connection = new SqlConnection(connectionString)) { connection.Execute("QueryRoleWithParms", dp, null, null, CommandType.StoredProcedure); string roleName = dp.Get<string>("@RoleName"); return roleName; } }
通用分页
CREATE PROCEDURE [dbo].[PageList] @TableName VARCHAR(200), --表名 @FieldName VARCHAR(500) = '*', --字段名 @Where VARCHAR(100) = NULL, --条件语句 @GroupBy VARCHAR(100) = NULL, --分组字段 @OrderBy VARCHAR(100), --排序字段 @PageIndex INT = 1, --当前页数 @PageSize INT = 20, --每页显示记录数 @TotalCount INT = 0 OUTPUT --总记录数 AS BEGIN --SQL拼接语句 DECLARE @SQL NVARCHAR(4000) --总记录数 SET @SQL='SELECT @RecordCount=COUNT(1) FROM ' + @TableName IF (ISNULL(@Where,'')<>'') SET @SQL=@SQL+' WHERE '+@Where ELSE IF (ISNULL(@GroupBy,'')<>'') SET @SQL=@SQL+' GROUP BY '+@GroupBy EXEC SP_EXECUTESQL @SQL,N'@RecordCount INT OUTPUT',@TotalCount OUTPUT --总页数 DECLARE @PageCount INT SELECT @PageCount=CEILING((@TotalCount+0.0)/@PageSize) --简单分页 SET @SQL='SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY '+@OrderBy+') AS RowNum,' + @FieldName + ' FROM '+@TableName+' AS A' IF (ISNULL(@Where,'')<>'') SET @SQL=@SQL+' WHERE '+@Where ELSE IF (ISNULL(@GroupBy,'')<>'') SET @SQL=@SQL+' GROUP BY '+@GroupBy IF (@PageIndex<=0) SET @PageIndex=1 IF @PageIndex>@PageCount SET @PageIndex=@PageCount DECLARE @BeginRowNum INT,@EndRowNum INT SET @BeginRowNum=(@PageIndex-1)*@PageSize+1 SET @EndRowNum=@BeginRowNum+@PageSize-1 SET @SQL=@SQL + ') AS B WHERE B.RowNum BETWEEN '+CONVERT(VARCHAR(32),@BeginRowNum)+' AND '+CONVERT(VARCHAR(32),@EndRowNum) EXEC(@SQL) END
代码
/// <summary> /// 通用分页 /// </summary> /// <returns></returns> public IEnumerable<T> GetCommonPaging<T>(string tableName, string fieldName, string where, string groupby, string orderby, int pageIndex, int pageSize) { var para = new DynamicParameters(); para.Add("TableName", tableName); para.Add("FieldName", fieldName); para.Add("Where", where); para.Add("GroupBy", groupby); para.Add("OrderBy", orderby); para.Add("PageIndex", pageIndex); para.Add("PageSize", pageSize); para.Add("TotalCount", dbType: DbType.Int32, direction: ParameterDirection.Output); using (IDbConnection connection = new SqlConnection(connectionString)) { return connnection.Query<T>("PageList", para, commandType: CommandType.StoredProcedure); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通