多条件搜索问题 -sql拼接与参数化查询
来源:传智播客 免费开发视频。
问题:根据书名或出版社或作者查询书籍信息。
using System;
using System.Collections.Generic问题;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace _01多条件搜索问题
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//假设表名:Books
//列名:BookName(书名)、Author(作者)、Pub(出版社) //多条件查询,要根据用户输入的内容来动态拼接SQL语句。
//1.假设如果用户没有输入任何条件,那么就查询出所有的记录
StringBuilder sbSQL = new StringBuilder("select * from Books "); //在wheres集合中保存查询的sql条件
List<string> wheres = new List<string>();
//把参数也放到一个集合当中
List<SqlParameter> listParameters = new List<SqlParameter>(); //2.如果用户输入了条件,则根据用户输入的条件动态拼接SQL语句
if (txtBookName.Text.Trim().Length > )
{ //sbSQL.Append(" BookName like @bkName");
wheres.Add(" BookName like @bkName");
listParameters.Add(new SqlParameter("@bkName", SqlDbType.NVarChar, ) { Value = "%" + txtBookName.Text.Trim() + "%" });
} if (txtAuthor.Text.Trim().Length > )
{
//sbSQL.Append(" Author like @author");
wheres.Add(" Author like @author ");
listParameters.Add(new SqlParameter("@author", SqlDbType.NVarChar, ) { Value = "%" + txtAuthor.Text.Trim() + "%" });
} if (txtPub.Text.Trim().Length > )
{
// sbSQL.Append(" Pub like @pub ");
wheres.Add(" Pub like @pub ");
listParameters.Add(new SqlParameter("@pub", SqlDbType.NVarChar, ) { Value = "%" + txtPub.Text.Trim() + "%" });
} //拼接SQL语句
//如果wheres集合当中的记录条数大于0,证明用户输入了条件
if (wheres.Count > )
{
sbSQL.Append(" where ");//只要有查询条件就拼接一个where
//然后把后面的查询条件拼接起来。
sbSQL.Append(string.Join(" and ", wheres)); }
SqlParameter[] pms = listParameters.ToArray();
MessageBox.Show(sbSQL.ToString());
//SqlHelper.ExecuteReader(sbSQL.ToString(),pms); //SqlCommand cmd = new SqlCommand();
//cmd.Parameters.AddRange(
} }
知识点:
1.sql拼接
2.参数化查询
3以下部分看起来简单,但却很难想到。
//在wheres集合中保存查询的sql条件
List<string> wheres = new List<string>();
//把参数也放到一个集合当中
List<SqlParameter> listParameters = new List<SqlParameter>();
if (wheres.Count > 0)
{
sbSQL.Append(" where ");//只要有查询条件就拼接一个where
//然后把后面的查询条件拼接起来。
sbSQL.Append(string.Join(" and ", wheres)); }
SqlParameter[] pms = listParameters.ToArray();
多条件搜索问题 -sql拼接与参数化查询的更多相关文章
- Sql Server 的参数化查询
为什么要使用参数化查询呢?参数化查询写起来看起来都麻烦,还不如用拼接sql语句来的方便快捷.当然,拼接sql语句执行查询虽然看起来方便简洁,其实不然.远没有参数化查询来的安全和快捷. 今天刚好了解了一 ...
- 防止sql注入的参数化查询
参数化查询为什么能够防止SQL注入 http://netsecurity.51cto.com/art/201301/377209.htm OleDbDataAdapter Class http://m ...
- SQL注入与参数化查询
SQL注入的本质 SQL注入的实质就是通过SQL拼接字符串追加命令,导致SQL的语义发生了变化.为什么发生了改变呢? 因为没有重用以前的执行计划,而是对注入后的SQL语句重新编译,然后重新执行了语法解 ...
- 多条件搜索优化sql
SELECT ctm.* FROM crawltaskmanage ctm,urlmanage um WHERE (ctm.status='0' AND um.`urlId`=ctm.`urlId`) ...
- 从sp_executesql中返回table型数据及动态SQL语句的参数化查询
在返回分页数据时,我们会经常会用到参数化传递过滤条件,如何拼接SQL语句成了一个难题. 我们可以这样拼接: exec('sp_executesql sql语句,参数定义,参数值') sql语句和参数定 ...
- 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参
转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...
- Sql Server参数化查询之where in和like实现之xml和DataTable传参 (转)
在上一篇Sql Server参数化查询之where in和like实现详解中介绍了在Sql Server使用参数化查询where in的几种实现方案,遗漏了xml和表值参数,这里做一个补充 文章导读 ...
- SQL Server通过条件搜索获取相关的存储过程等对象
在SQL Server中,我们经常遇到一些需求,需要去搜索存储过程(Procedure).函数(Function)等对象是否包含某个对象或涉及某个对象,例如,我需要查找那些存储过程.函数是否调用了链接 ...
- SQL参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...
随机推荐
- Django分页设置
1. """ 分页组件使用示例: obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.pa ...
- Linked List-237. Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...
- C++中将二维数组(静态的和动态的)作为函数的参数传递
在C++编程中,我们经常将数组作为参数传递到另一个函数,数组的维数不同,传递方式也不同,此处将作一个总结,包括一维静态.动态数组,二维静态.动态数组. 一,一维数组(静态.动态一维数组) 1, 一维数 ...
- nodejs改变代码不需要重启的方法
1.node 搭建本地服务器 在F:/node文件夹下新建app.js const http = require('http'); http.createServer((req, res) => ...
- Android之系统架构
Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.Andr ...
- 通过sessionStorage来根据屏幕宽度变化来加载不同的html页面
因为项目需要,分别写了移动端和PC端的两个html页面,现在需要根据不同的屏幕宽度来加载对应的页面. 先说一下本人的思路-- 刚开始我直接在加载页面的时候判断屏幕宽度,然后加载相应的页面,大家是不是也 ...
- document文档对象
document 文挡对象 - JavaScript脚本语言描述———————————————————————注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写否则会提示你一 ...
- dubbo学习(1)--简单的入门搭建实例
转载请注明源文出处:http://www.cnblogs.com/lighten/p/6828026.html 1 简介 dubbo是一个分布式服务框架,由阿里巴巴的工程师开发,致力于提供高性能和透明 ...
- java内存数据管理
准确的说应该是java8以前的内存管理方式 区别在永久代(方法区)上 public class RamManager { //1.a存储于永久代 public static int a =1; pri ...
- (01)JVM-内存三大核心区域以及分析
package org.burning.sport.jvm; /** * 从JVM调用的角度分析Java程序对内存空间的使用, * 当JVM进程启动的时候,会从类加载器路径中找到包含main方法的入 ...