存储过程分页以及参数拼接sql语句、C#调用存储过程

1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入

System.Data.SqlClient.SqlParameter[] parameters = { new System.Data.SqlClient.SqlParameter("@i",100), new System.Data.SqlClient.SqlParameter("@j",100), new System.Data.SqlClient.SqlParameter("@he", System.Data.SqlDbType.Int) }; parameters[2].Direction = System.Data.ParameterDirection.Output; var slt = this.DbContext.Database.SqlQuery<int>("exec pro_Add @i,@j,@he output", parameters); slt.ToList(); int AllCount = Int32.Parse(parameters[2].Value.ToString());

2.存储过程分页的功能实现

create procedure paging_procedure ( @pageIndex int, -- 第几页 @pageSize int -- 每页包含的记录数 ) as begin select top (select @pageSize) * -- 这里注意一下,不能直接把变量放在这里,要用select from (select row_number() over(order by sno) as rownumber,* from student) temp_row where rownumber>(@pageIndex-1)*@pageSize; end -- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程 exec paging_procedure @pageIndex=2,@pageSize=10;

3.存储过程中处理,条件中带IN的语句

--例如: SELECT * FROM tb WHERE id IN (1, 2, 3, 4, ........) AND NAME = 'best' --1.将括号的条件做成变量 DECLARE @str VARCHAR(4000) SET @str = '1,2,3,4,5.......' --2.然后将@s拆分后插入临时表 CREATE TABLE #t ( id VARCHAR(10) ) DECLARE @i INT DECLARE @len INT SET @i = 1 WHILE @i < LEN(@str + ',') BEGIN INSERT #t SELECT SUBSTRING(@str + ',', @i, CHARINDEX(',', @str + ',', @i) -@i) SET @i = CHARINDEX(',', @str + ',', @i) + 1 END --3利用临时表和原表进行连接取值 SELECT k.* FROM tb k INNER JOIN #t p ON p.id = k.id WHERE NAME = 'best'

 


__EOF__

本文作者程序员不帅哥
本文链接https://www.cnblogs.com/Mr-Worlf/p/13915483.html
关于博主:一个精通抄代码的老猿
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   程序员不帅哥  阅读(327)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示