問題:根據書名或出版社或作者查詢書籍資訊。
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!