天天看點

多條件搜尋問題 -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 > 0)
            {

                //sbSQL.Append("  BookName like @bkName");
                wheres.Add("  BookName like @bkName");
                listParameters.Add(new SqlParameter("@bkName", SqlDbType.NVarChar, 100) { Value = "%" + txtBookName.Text.Trim() + "%" });
            }

            if (txtAuthor.Text.Trim().Length > 0)
            {
                //sbSQL.Append("  Author like @author");
                wheres.Add("   Author like @author  ");
                listParameters.Add(new SqlParameter("@author", SqlDbType.NVarChar, 100) { Value = "%" + txtAuthor.Text.Trim() + "%" });
            }

            if (txtPub.Text.Trim().Length > 0)
            {
                // sbSQL.Append(" Pub like @pub ");
                wheres.Add("   Pub like @pub ");
                listParameters.Add(new SqlParameter("@pub", SqlDbType.NVarChar, 100) { Value = "%" + txtPub.Text.Trim() + "%" });
            }

            //拼接SQL語句
            //如果wheres集合當中的記錄條數大于0,證明使用者輸入了條件
            if (wheres.Count > 0)
            {
                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();      

樹立目标,保持活力,gogogo!