存储过程分页以及参数拼接sql语句

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__

 

2024-02-19 15:56:38【出处】:https://www.cnblogs.com/Mr-Worlf/p/13915483.html

=======================================================================================

posted on   jack_Meng  阅读(74)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2020-02-19 WPF PasswordBox.Password 的 MVVM 数据绑定
2020-02-19 WPF: WrapPanel 容器的模板数据绑定(ItemsControl)
2020-02-19 WPF基本控件介绍
2020-02-19 初识WPF ---- WPF HelloWord!
2019-02-19 C#遍历菜单项
2019-02-19 C# 获取机器码
2019-02-19 DevExpress的DateEdit控件正确显示日期的周名称

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩