sql 通用高效分页代码(存储过程是带有sql注入)(1/2)

sql 通用高效分页代码(存储过程是带有sql注入)

大家可以看到上面的存储过程中是通过一些步骤最终拼接成一个sql字符串,然后通过exec执行这个串得到分页的结果。

我们假定要做一个这样的查询,通过用户名username模糊查询用户,为了叙述方便,便于理解我们只考虑取第一页的情况,取出存储过程中取第一页的拼串行如下:

为了便于说明问题,我们可以假定@pagesize为20,@strgetfields为 ‘*',@tblname为useraccount,@strorder为' order by id desc' 那么上面一行可以写成如下形式:

set @strsql = 'select top 20 * from [useraccount] where ' + @strwhere + ' order by id desc'

我们可以假定用户输入的模糊用户名是: jim's dog
我们用sqlparameter传递参数给分页存储过程@strwhere 的值是:'username like ‘'%jim'' dog%'''(注意like后边的字符串中的单引号已经全部变成两个单引号了),我们将这个值代入上面的@strsql赋值语句中,如下:

set @strsql = 'select top 20 * from [useraccount] where username like ''%jim'' dog%'' order by id desc'

让我们写上声明变量的部分执行在查询分析器中测试一下,代码如下:

 

declare @strsql varchar(8000)
declare @strwhere varchar(1000)
set @strwhere = 'username like ''%jim'' dog%'''
set @strsql = 'select top 20 * from [useraccount] where ' + @strwhere + ' order by id desc'
print @strsql
exec (@strsql) 

首页 1 2 末页

时间: 2024-10-24 00:17:53

sql 通用高效分页代码(存储过程是带有sql注入)(1/2)的相关文章

JSP通用高大上分页代码(超管用)_JSP编程

先给大家展示下分页效果,如果亲们还很满意请参考以下代码. 在超链接中要保留参数 当使用多条件查询后,然后在点击第2 页时,这个第2页超链接没有条件了,所以会丢失条件,所以我们需要在页面上的所有链接都要保留条件! 我们要把条件以一个字符串的形式保存到PageBean的url中!这个任务交给Servlet! pagebean package cn.itcast.cstm.domain; import java.util.List; public class PageBean<T> { privat

如此高效通用的分页存储过程是带有sql注入漏洞的

存储过程|分页 在google中搜索"分页存储过程"会出来好多结果,是大家常用的分页存储过程,今天我却要说它是有漏洞的,而且漏洞无法通过修改存储过程进行补救,如果你觉得我错了,请读下去也许你会改变看法.通常大家都会认为存储过程可以避免sql注入的漏洞,这适用于一般的存储过程,而对于通用分页存储过程是不适合的,请看下面的代码和分析! 一般的通用的分页存储过程代码如下: 通用分页存储过程CREATE PROCEDURE pagination@tblName varchar(255), --

通用高效分页存储过程代码

存储过程|分页   -- 获取指定页的数据 CREATE PROCEDURE pagination@tblName varchar(255), -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='', -- 排序的字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @doCount bit = 0, -- 返回记录总数, 非 0 值则返回

通用的分页类(不执行sql,直接绑定数据)

分页|数据|执行 数据分页一直以来是比较头疼的问题,不少的分页控件也随之产生.但是我用过的几个控件,本身都要执行SQL,对存储过程支持不好,为了方便,特别写了个通用分页类,利用PagedDataSource来实现DataGrid,DataList,Repeater的分页.完成上一页,下一页,最后一页,最前一页,总页数,当前页数,跳转这些基本的功能. using System;using System.Collections;using System.ComponentModel;using Sy

如何实现ListView高效分页代码_实用技巧

ListView选择自动分页时  其实就是添加了一个DataPager分页控件两者间存在着嵌套关系<Repeater与ListView>中提到这样的分页并不是高效的 因为数据源还是返回了所有的数据  而非当前页数据  优化方案及步骤: 1.改数据源EnablePaging属性为true [允许分页] 设置MaximumRowsParameterName="rowIndex"[MSDN解释:该参数接受检索的行数的值  可以理解为:上一页的最后一行的下标] 设置StartRow

毕业项目求个c#高效分页的代码

问题描述 毕业项目求个c#高效分页的代码 最好不要存储过程,最好都是后台代码,网上都是存储过程,求大神给下 解决方案 网上查找了一下,还是有不少源代码可以参考的: C#高效分页代码(不用存储过程) C#高效分页代码(不用存储过程) 解决方案二: 存储过程比较简单嘛.代码中只要传个页码就搞定了,难道不好. 不要存储过程,那就直接写sql,或者用linq. 解决方案三: RowNumber写法,MSSQL2012新出了个offset写法,更简单 SELECT tblexamprovider.* FR

高效mssql存储过程分页代码(1/6)

在一般的小数据分页是我们就用简单的分页功能就可以了,但如果上百万级数据分页了,那么我就不得不考虑到高效mssql存储过程分页代码哦. declare @TotalCount int declare @TotalPageCount int exec P_viewPage_A 'type1','*','id','','id asc',1,0,4,3,@TotalCount output,@TotalPageCount output select * from type1 Create PROC P_

sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()

在存储过程当中如果每次都统计记录总数将会严重影响效率,相同的查询条件记录总数必定是相同的,所以如果第一页执行之后把记录总数保存起来,点击其他页次的时候命令存储过 程不再统计记录总数将会大大提高系统性能.通过测试结果看出每次都要统计总记录数使用ROW_NUMBER()和不使用ROW_NUMBER()差别不是太大,如果仅第一次统计总记录数使用ROW_NUMBER()将 会比不使用ROW_NUMBER()的效率提高很多. 结构: 复制代码 代码如下: CREATE TABLE [dbo].[Xtest

sqlserver 通用存储过程分页代码

分页存储过程大致有下列几种 1. 利用Not in 和select top 2. 利用id大于多少和select top 3. 利用sql中的游标 4.临时表 可以参看网上的以下链接 C#中常用的分页存储过程小结 http://read.newbooks.com.cn/info/174545.html 在2005中我们的选择就多了,可以利用新语法CTE(公用表表达式),关于CTE的介绍大家可以参看博客园中一位仁兄的系列教程 http://www.cnblogs.com/nokiaguy/arch