• 存储过程分页以及参数拼接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' 
    更多精彩内容,请关注我的V信公众号:程序员不帅哥
  • 相关阅读:
    数学前沿
    线性空间引论(第2版)
    例解回归分析(原书第5版)
    随机过程(原书第2版)
    Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法
    c# HttpClient禁止缓存
    AngularJs 1.5 $location获取url参数
    Net中HttpClient 重试
    C# 内存信息
    EntityFramework Core 封装
  • 原文地址:https://www.cnblogs.com/Mr-Worlf/p/13915483.html
Copyright © 2020-2023  润新知