关于这个网上有很多,但都不是非常完整,许多看的一头雾水。我也是根据前辈的很多资料进行了总结,做一个完整的介绍,希望大家共同学习。

首先是存储过程:

  1. ALTER PROCEDURE [dbo].[GetRecordFromPage]
  2. @tblName      varchar(255),       -- 表名
  3. @fldName      varchar(255),       -- 字段名
  4. @PageSize     int = 10,           -- 页尺寸
  5. @PageIndex    int = 1,            -- 页码
  6. @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回
  7. @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
  8. @strWhere     varchar(2000) = ''  -- 查询条件 (注意: 不要加 where)
  9. AS
  10. declare @strSQL   varchar(6000)       -- 主语句
  11. declare @strTmp   varchar(1000)       -- 临时变量
  12. declare @strOrder varchar(500)        -- 排序类型
  13. declare @str varchar(500) --字符串临时变量
  14. if @OrderType != 0
  15. begin
  16. set @strTmp = '<(select min'
  17. set @strOrder = ' order by [' + @fldName + '] desc'
  18. end
  19. else
  20. begin
  21. set @strTmp = '>(select max'
  22. set @strOrder = ' order by [' + @fldName +'] asc'
  23. end
  24. set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
  25. + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
  26. + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
  27. + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
  28. + @strOrder
  29. if @strWhere != ''
  30. set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
  31. + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
  32. + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
  33. + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') '
  34. + @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder
  35. if @PageIndex = 1
  36. begin
  37. set @strTmp = ''
  38. if @strWhere != ''
  39. set @strTmp = ' where (' + @strWhere + ') '
  40. set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
  41. + @tblName + ']' + @strTmp + ' ' + @strOrder
  42. end
  43. if @IsReCount != 0
  44. set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where (' + @strWhere + ') '
  45. exec (@strSQL)

如果是需要建立的那么就将ALTER修改为CREATE即可;

下面就介绍如何使用,我采用三层架构的方式:

首先是WEB:

  1. /// <summary>
  2. /// 查询按钮
  3. /// </summary>
  4. /// <param name="sender"></param>
  5. /// <param name="e"></param>
  6. protected void btnSearch_Click(object sender, EventArgs e)
  7. {
  8. SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL();
  9. this.AspNetPager.RecordCount = bll.GetCount(this.txtStr.Text);
  10. this.BindData();
  11. }

这个是按钮的事件

  1. /// <summary>
  2. /// 绑定列表
  3. /// </summary>
  4. private void BindData()
  5. {
  6. SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL();
  7. DataSet ds = bll.GetList(this.AspNetPager.PageSize, this.AspNetPager.CurrentPageIndex, this.txtStr.Text, "1");
  8. this.HSGridView.DataSource = ds;
  9. this.HSGridView.DataBind();
  10. }

这个是绑定到GridView的函数;

BLL层:

  1. /// <summary>
  2. /// 分页获得数据列表
  3. /// </summary>
  4. /// <param name="PageSize">每页数量</param>
  5. /// <param name="PageIndex">当前页索引</param>
  6. /// <param name="strWhere">查询字符串</param>
  7. /// <param name="OrderType">设置排序类型, 非 0 值则降序</param>
  8. /// <returns></returns>
  9. public DataSet GetList(int PageSize, int PageIndex, string strWhere, string OrderType)
  10. {
  11. return dal.GetList(PageSize, PageIndex, strWhere, OrderType);
  12. }

DAL层:

  1. /// <summary>
  2. /// 分页获取数据列表
  3. /// </summary>
  4. /// <param name="PageSize">每页数量</param>
  5. /// <param name="PageIndex">当前页索引</param>
  6. /// <param name="strWhere">查询字符串</param>
  7. /// <param name="OrderType">设置排序类型, 非 0 值则降序</param>
  8. /// <returns></returns>
  9. public DataSet GetList(int PageSize, int PageIndex, string str, string OrderType)
  10. {
  11. string keyStr = "";
  12. if (str != "")
  13. {
  14. keyStr = "Name like '%" + str + "%'";
  15. }
  16. SqlParameter[] parameters = {
  17. new SqlParameter("@tblName", SqlDbType.VarChar, 255),
  18. new SqlParameter("@fldName", SqlDbType.VarChar, 255),
  19. new SqlParameter("@PageSize", SqlDbType.Int),
  20. new SqlParameter("@PageIndex", SqlDbType.Int),
  21. new SqlParameter("@IsReCount", SqlDbType.Bit),
  22. new SqlParameter("@OrderType", SqlDbType.Bit),
  23. new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
  24. };
  25. parameters[0].Value = "HS_Code";
  26. parameters[1].Value = "Name";
  27. parameters[2].Value = PageSize;
  28. parameters[3].Value = PageIndex;
  29. parameters[4].Value = 0;
  30. parameters[5].Value = int.Parse(OrderType);
  31. parameters[6].Value = keyStr;
  32. return DBHelper.RunProcedure("GetRecordFromPage", parameters, "ds");
  33. }

其中keyStr = "Name like '%" + str + "%'"; 就是传入模糊查询的参数了

最后就是DBHelper了:

  1. /// <summary>
  2. /// 执行存储过程
  3. /// </summary>
  4. /// <param name="storedProcName">存储过程名</param>
  5. /// <param name="parameters">存储过程参数</param>
  6. /// <param name="tableName">DataSet结果中的表名</param>
  7. /// <returns>DataSet</returns>
  8. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
  9. {
  10. using (SqlConnection connection = new SqlConnection(connectionString))
  11. {
  12. DataSet dataSet = new DataSet();
  13. connection.Open();
  14. SqlDataAdapter sqlDA = new SqlDataAdapter();
  15. sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  16. sqlDA.Fill(dataSet, tableName);
  17. connection.Close();
  18. return dataSet;
  19. }
  20. }
  21. /// <summary>
  22. /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
  23. /// </summary>
  24. /// <param name="connection">数据库连接</param>
  25. /// <param name="storedProcName">存储过程名</param>
  26. /// <param name="parameters">存储过程参数</param>
  27. /// <returns>SqlCommand</returns>
  28. private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  29. {
  30. SqlCommand command = new SqlCommand(storedProcName, connection);
  31. command.CommandType = CommandType.StoredProcedure;
  32. foreach (SqlParameter parameter in parameters)
  33. {
  34. if (parameter != null)
  35. {
  36. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  37. (parameter.Value == null))
  38. {
  39. parameter.Value = DBNull.Value;
  40. }
  41. command.Parameters.Add(parameter);
  42. }
  43. }
  44. return command;
  45. }

这样大体能实现功能了。

希望对大家有帮助。

转载于:https://blog.51cto.com/zhangyusong/999751

asp.net模糊查询存储过程相关推荐

  1. asp.net模糊查询

    (1)前言 我们做编程的人员,是必须得和数据打交道,和数据打交道,就必须有数据查询的功能,有数据查询的功能,就少不了模糊查找这个共能的模块,我所用的数据库是Mysql,废话不多说了,请看下文. (2) ...

  2. ACCESS模糊查询like的解决方法SQL查询语句通配符问题

    前言: ACCESS的通配符和SQL SERVER的通配符比较 =================================================== ACCESS库的通配符为:  * ...

  3. oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  4. 中文拼音模糊查询的一种解决方法

    目前在ASP.Net平台下中文拼音模糊查询的方法有好几种.不外乎都是把拼音的码放到数据库里. 今天发现另一种解决的办法.网上有人把拼音码做成SQL Server的PLUGIN,通过存储过程来调用. 支 ...

  5. C语言的模糊查询,【C语言如何实现中文模糊查询+急+】

    C语言如何实现中文模糊查询? (急) 2009年02月25 - 我要建立一个生物信息检索系统,如何用C语言实现数据的模糊查询,数据包括中文和英文,请高手指点(最好附上例子或源程序),谢谢! 怎样用c语 ...

  6. PHP多条件模糊查询代码查询,PHP多条件模糊查询

    所使用的方法:$sqlArr=array();array_push();implode(); 原理, 一.建立sql语句前半句,并且建立一个空数组. 二.根据条件是否为空来判断是否向数组中添加元素.如 ...

  7. mybaits的模糊查询_mybatis模糊查询防止SQL注入(很详细)

    SQL注入,大家都不陌生,是一种常见的攻击方式.攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如"or '1'='1'"这样的语句),有可能入侵参数检验不足的应用程序 ...

  8. Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中

    功能:在textbox中输入内容,动态从数据库模糊查询显示到下拉框中,以供选择 1.建立一aspx页面,html代码 <HTML>     <HEAD>         < ...

  9. ASP调用带参数存储过程的几种方式

    最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种ASP调用带参数存储过程的方法. 1. 这也是最简单的方法,两个输入参数,无返回值: set connection = server.creat ...

最新文章

  1. spark+数据倾斜+解决方案
  2. NOIP2015神奇的幻方
  3. JavaScript时间日期格式转化
  4. python第三方库Requests的基本使用
  5. PowerDesigner设计数据库
  6. lucene 入门整理
  7. [html] html5哪些标签可以优化SEO?
  8. 机器学习方法_机器学习模型应用方法综述
  9. 使用Blink CEP实现差值聚合计算
  10. mysql的知识_mysql基础知识
  11. Hadoop生态圈-Flume的组件之自定义Sink
  12. php随机获取数组的值
  13. 2021-07-01本科毕业设计需要查重什么?
  14. ruby中调用dll的诡异错误
  15. springboot学习路径 转载子方志朋
  16. 2021年N1叉车司机考试总结及N1叉车司机复审考试
  17. php设置个性域名,利用nginx泛域名解析配置二级域名和多域名,实现二级域名子站,用户个性独立子域名。...
  18. error: Failed dependencies: perl(Data::Dumper) is needed by MySQL-server-5.6.46-1.el7.x8
  19. springMVC学习2
  20. C++开发斗地主(QT)第三篇之动画发牌与位置计算

热门文章

  1. 第6章 数组----复制数组
  2. POJ 1305 Fermat vs. Pythagoras【勾股数】
  3. MSSQL2000+asp.net+论坛安装过程
  4. 调整体态的最佳瑜珈调息法
  5. MIS开发中C/S模式与B/S模式的结合策略
  6. Redis 的持久化方案
  7. 3.3V与5V的电平转换
  8. 二极管的反向恢复过程
  9. The Ice::Current Object
  10. Java精选笔记_XML基础