来源:传智播客  免费开发视频。

问题:根据书名或出版社或作者查询书籍信息。

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拼接与参数化查询的更多相关文章

  1. Sql Server 的参数化查询

    为什么要使用参数化查询呢?参数化查询写起来看起来都麻烦,还不如用拼接sql语句来的方便快捷.当然,拼接sql语句执行查询虽然看起来方便简洁,其实不然.远没有参数化查询来的安全和快捷. 今天刚好了解了一 ...

  2. 防止sql注入的参数化查询

    参数化查询为什么能够防止SQL注入 http://netsecurity.51cto.com/art/201301/377209.htm OleDbDataAdapter Class http://m ...

  3. SQL注入与参数化查询

    SQL注入的本质 SQL注入的实质就是通过SQL拼接字符串追加命令,导致SQL的语义发生了变化.为什么发生了改变呢? 因为没有重用以前的执行计划,而是对注入后的SQL语句重新编译,然后重新执行了语法解 ...

  4. 多条件搜索优化sql

    SELECT ctm.* FROM crawltaskmanage ctm,urlmanage um WHERE (ctm.status='0' AND um.`urlId`=ctm.`urlId`) ...

  5. 从sp_executesql中返回table型数据及动态SQL语句的参数化查询

    在返回分页数据时,我们会经常会用到参数化传递过滤条件,如何拼接SQL语句成了一个难题. 我们可以这样拼接: exec('sp_executesql sql语句,参数定义,参数值') sql语句和参数定 ...

  6. 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参

    转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...

  7. Sql Server参数化查询之where in和like实现之xml和DataTable传参 (转)

    在上一篇Sql Server参数化查询之where in和like实现详解中介绍了在Sql Server使用参数化查询where in的几种实现方案,遗漏了xml和表值参数,这里做一个补充 文章导读 ...

  8. SQL Server通过条件搜索获取相关的存储过程等对象

    在SQL Server中,我们经常遇到一些需求,需要去搜索存储过程(Procedure).函数(Function)等对象是否包含某个对象或涉及某个对象,例如,我需要查找那些存储过程.函数是否调用了链接 ...

  9. SQL参数化查询

    参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...

随机推荐

  1. C# 标准事件模式

    .NET框架为事件定义了一个标准模式,它的目的是保持框架和用户代码之间的一致性. 标准事件的模式核心是SystemEventArgs——预定义的没有成员的框架类(不同于静态Empty属性) Event ...

  2. NetCore入门篇:(九)Net Core项目使用Session及用Redis做分布式

    一.简介 1.因为Net Core默认是没有启动Session功能的,如果需要使用,需要通过代码开启. 2.本篇说明如果启用默认Session实现,即Session存到内存中. 3.本篇扩展说明如何用 ...

  3. 利用bulk添加百万条数据,进行测试

    (1)连接数据库 public static void BulkToDB(DataTable dt) { //数据库连接 SqlConnection sqlCon = new SqlConnectio ...

  4. git提交忽略文件或文件夹

    在项目根目录下面 添加 .gitignore文件 文件中每一行表示需要忽略的文件的正则表达式. .gitignore文件过滤有两种模式,开放模式和保守模式 1. 开放模式负责设置过滤哪些文件和文件夹 ...

  5. iOS推送功能极光推送的介绍与实现

    1.个人整理操作流程 2.官方使用说明流程 2018iOS极光推送完整流程 极光推送官网

  6. 2.jquery在js中写标准的ajax请求

    $(function(){ $.ajax({ url:"http://www.microsoft.com", //请求的url地址 dataType:"json" ...

  7. sublime text 另一种对齐

    效果如下: http://sublime-text-unofficial-documentation.readthedocs.org/en/latest/extensibility/plugins.h ...

  8. [As3.0] 获取本机信息

    package { import flash.display.Sprite; import flash.events.Event; import flash.net.NetworkInfo; impo ...

  9. CSDN无耻,亿赛通无耻

    吐槽下,自己写一篇关于亿赛通加密文件的简单破解方式,竟然收到请求删除博客的私信,然后那篇博客就没有了. 太过于无耻了.

  10. (原创)确保JAVA线程安全的4种常用方法

    在Java中可以有很多方法来保证线程安全,比如使用同步方法.同步块,使用原子类(atomic concurrent classes),实现并发锁,使用volatile关键字,使用不变类和线程安全类. ...