多條件搜索問題 -sql拼接與參數化查詢

来源:http://www.cnblogs.com/hao-1234-1234/archive/2017/12/11/8025421.html
-Advertisement-
Play Games

來源:傳智播客 免費開發視頻。 問題:根據書名或出版社或作者查詢書籍信息。 知識點: 1.sql拼接 2.參數化查詢 3以下部分看起來簡單,但卻很難想到。 ...


來源:傳智播客  免費開發視頻。

 

問題:根據書名或出版社或作者查詢書籍信息。

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();



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • - 服務端軟體 - socket服務端 - 本地文件操作 - 解析指令【SQL語句】 - 客戶端軟體(各種各樣) - socket客戶端 - 發送指令 - 解析指令【SQL語句】 上述提到MySQL等軟體可以接受命令,並做出相應的操作,由於命令中可以包含刪除文件、獲取文件內容等眾多操作,對於編寫的命 ...
  • 相信每個小伙伴在使用laravel的時候都會記錄日誌、查看日誌。那麼問題來了,比如我在對接zabbix介面的時候,使用 Log::info() 會讓日誌全部記錄在 storage/logs/laravel.log 文件里,查找起來比較麻煩。那麼我可不可以單獨記錄在一個日誌文件里呢? laravel文 ...
  •   hashCode和equals方法是Object類的相關方法,而所有的類都是直接或間接的繼承於Object類而存在的,為此,所有的類中都存在著hashCode和equals。通過翻看Object類的相關源碼,發現其hashCode的實現方式如下:   從中 ...
  • 本篇是為項目實戰做準備,學習Linux是必備的,不然都不好意思叫全棧對吧?下麵是一位資深大神寫的文章,夠詳細,我也不用浪費時間再寫了 原文鏈接:Ubuntu學習——第一篇 內容: 一、 Ubuntu簡介 Ubuntu(烏班圖)是一個基於Debian的以桌面應用為主的Linux操作系統,據說其名稱來自 ...
  • OpenXml讀取word內容註意事項 1、使用OpenXml讀取word內容,word尾碼必須是".docx";如果word尾碼是".doc"需要轉成".docx"後,才可以讀取; 2、需要引入相關dll;"WindowsBase.dll"、“DocumentFormat.OpenXml.dll” ...
  • 一、分頁存儲過程 使用存儲過程編寫一個分頁查詢 set nocount off --關閉SqlServer消息 --set nocount on --開啟SqlServer消息 gocreate proc usp_getMyStudentsDataByPage --輸入參數@pagesize int ...
  • 有時候在窗體中執行不斷的GDI+操作的時候會出現閃速的狀況,除了修改窗體的參數,更應該解決刷新本身的問題,雙緩衝可能就是這樣來的。 方法1: 用GDI繪製在點陣圖上,然後再重新生成點陣圖 ...
  • 在上篇文章中,你跟著我寫了一個HelloWorld,本篇中,我們來談談一些C#程式中的小概念 1、C# 程式結構 一個 C# 程式主要包括以下部分: 命名空間聲明(Namespace declaration) 一個類(class) Class 方法 Class 屬性 一個 Main(主)方法 語句( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...