天天看點

Ado.Net SQL語句參數化(SqlParameter用法)(多條件模糊查詢的實作)

使用SqlParameter将查詢條件參數化可以達到以下效果:

  1. 避免SQL注入,提高代碼而安全性。
  2. 利用SqlParameter的重載方法、參數數組等可以提高代碼的重用率
  3. 可以實作SQl語句參數的動态添加

插入内容:

using的使用,在Ado.Net程式中,用using的方式打開資料庫時,當不用資料庫連接配接可以自動關閉釋放資源。有利于資源的回收利用

SQL語句參數化的三種方式:

1.直接參數化(以win32程式為例)

using System.Data.SqlClient;

namespace EasySqlParameter
{
    class Program
    {
        static void Main(string[] args)
        {
            string conText = "server=.;uid=sa;pwd=123456;database=ars";
            using (SqlConnection con = new SqlConnection(conText))
            {
                con.Close();//打開資料庫連接配接
                string sqlText = "select sName from student where [email protected]";//sql語句帶多個參數
                using (SqlCommand cmd = new SqlCommand(sqlText, con))
                {
                    SqlParameter parameter = new SqlParameter("@sid", 20160001);
                    cmd.Parameters.Add(parameter);//将參數添加到SQL執行指令
                    cmd.ExecuteNonQuery();//傳回受影響的行數
                }
            }
        }
    }
}
           

2.參數數組參數化(以win32程式為例)

using System.Data.SqlClient;

namespace SQLParameters
{
    class Program
    {
        static void Main(string[] args)
        {
            string conText = "server=.;uid=sa;pwd=123456;database=ars";
            using (SqlConnection con = new SqlConnection(conText))
            {
                using (SqlCommand cmd = con.CreateCommand())
                {
                    con.Open();
                    cmd.CommandText= "select sName from student where sId = @sid and sMajor = @sMajor and sPassword = @sPassword";
                    //構造參數數組parameters
                    SqlParameter[] parameters = {new SqlParameter("@sid",20160001),
                                                new SqlParameter("@smajor",1101),
                                                new SqlParameter("@spassword",123456) };
                    cmd.Parameters.AddRange(parameters);
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
}
           

3.參數集合參數化(适合多條件查詢或者模糊查詢使用),以兩個條件的winform多條件模糊查詢為例:

(1)查詢界面建構如下:

Ado.Net SQL語句參數化(SqlParameter用法)(多條件模糊查詢的實作)

(2)搜尋按鈕中的代碼如下:

private void btnSearch_Click(object sender, EventArgs e)
        {
            //************查詢條件集合的擷取***************//
            List<SqlParameter> parameters = new List<SqlParameter>();//建構參數數組
            List<string> wherelist = new List<string>();//建構查詢條件字元串數組
            if (!string.IsNullOrEmpty(this.txtsId.Text.Trim()))//判斷輸入條件是否為空,否則添加查詢的參數和條件
            {
                wherelist.Add("sId like @sId");
                SqlParameter parameter = new SqlParameter();
                parameter.ParameterName = "@sId";
                parameter.Value = "%" + textsId.Text.ToString() + "%";
                parameters.Add(parameter);
            }
            if (!string.IsNullOrEmpty(this.txtsName.Text.Trim()))
            {
                wherelist.Add("sName like @sName");
                SqlParameter parameter = new SqlParameter();
                parameter.ParameterName = "@sName";
                parameter.Value = "%" + textsName.Text.ToString() + "%";
                parameters.Add(parameter);
            }


            //************将查詢條件集合轉換為數組***************//
            SqlParameter[] sqlParameters = parameters.ToArray();


            //************查詢所需SQL語句的拼接***************//
            string sqlText = "select sId, sName, sPassword, sMajor from student";//沒有拼接的SQL語句,沒有查詢條件
            if (wherelist.Count > 0)//查詢條件字元串的拼接
            {
                sqlText += " where " + string.Join(" and ", wherelist);
            }

            //************按條件查詢資料***************//
            string conText = "server=.;uid=sa;pwd=123456;database=ars";
            using (SqlDataAdapter adapter = new SqlDataAdapter(sqlText, conText))
            {
                DataTable dt = new DataTable();//接收查詢資料
                adapter.SelectCommand.Parameters.AddRange(sqlParameters);//将參數值賦給查詢條件
                adapter.Fill(dt);
                this.dataGridView1.DataSource = dt;
            }
        }
           

(3)模糊查詢結果

Ado.Net SQL語句參數化(SqlParameter用法)(多條件模糊查詢的實作)

繼續閱讀