ADO.NET參數化查詢的必要性


參數化查詢(Parameterized Query )是指在設計與數據庫鏈接並訪問數據時,在需要填入數值或數據的地方,使用參數 (Parameter) 來給值,但是很多童鞋都不知道參數化查詢有哪些好處。

1、防止SQL注入;2、提高查詢性能(主要是可以復用查詢計划),這點在數據量較大時尤為重要

一、防止SQL注入

      參數化查詢目前已被視為最有效可預防SQL注入攻擊 (SQL Injection) 的攻擊手法的防御方式,相信大家都知道這個,在這里我將不會多講。

二、提高查詢性能

  一個簡單的sql語句,通常有以下幾種寫法:

string sql=string.format(@"select userName from userInfo where Id={0}",id);

string sql=@"select userName from userInfo where Id="+id;

string sql=@"select userName from userInfo where Id=@id";

相信有一些基礎的童鞋都知道字符串拼接的性能如何了,尤其是多次拼接。

這里只講第三種,參數化查詢,代碼如下:

View Code
 1 using System.Data;
 2 using System.Data.SqlClient;
 3 
 4 namespace HelperCommon
 5 {
 6     public class Error500
 7     {
 8         //通過用戶id獲取名字
 9         public string GetUserNameById(int id)
10         {
11             string sql = @"select userName from userInfo where Id=@id";
12             //參數為值類型(int,bigint,decimal,datetime等)指定參數類型即可,不必指定長度
13             SqlParameter para = new SqlParameter("@id",SqlDbType.Int);
14             para.Value = id;
15             
16             object name= SqlHelper.ExecuteScalar(SqlHelper.Dev2, CommandType.Text, sql, para);
17             if (null == name)
18                 return string.Empty;
19             return (string) name;
20         }
21 
22         //通過用戶名獲取用戶id
23         public int GetUserIdByName(string name)
24         {
25             string sql = @"select userName from userInfo where Id=@name";
26             //參數類型為可變長度時(varchar,nvarchar,char等)請指定參數類型及長度
27             /*傳值為varchar(max)或者nvarchar(max)時,參數長度指定為-1即可*/
28             SqlParameter para = new SqlParameter("@name", SqlDbType.VarChar,5);
29             para.Value = name;
30             object id = SqlHelper.ExecuteScalar(SqlHelper.Dev2, CommandType.Text, sql, para);
31             if (null == name)
32                 return 0;
33             return (int)id;
34         }
35     }
36 }

參數化查詢可以提高查詢性能(主要是可以復用查詢計划),這點在數據量較大時尤為重要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM