ASP.NET中引數化查詢
阿新 • • 發佈:2019-02-07
一、引數化查詢原理
在使用引數化查詢的情況下,資料庫伺服器不會將引數的內容視為SQL指令的一部份來處理,而是在資料庫完成 SQL指令的編譯後,才套用引數執行,因此就算引數中含有惡意的指令,由於已經編譯完成,就不會被資料庫所執行。
有部份的開發人員可能會認為使用引數化查詢,會讓程式更不好維護,或者在實現部份功能上會非常不便,然而,使用引數化查詢造成的額外開發成本,通常都遠低於因為SQL注入攻擊漏洞被發現而遭受攻擊,所造成的重大損失。
引數化查詢的關鍵是查詢優化器將建立一個可以重用的快取計劃。通過自動地或程式設計使用引數化查詢,SQL Server可以優化類似T-SQL語句的處理。這個優化消除了對使用高貴資源為這些類似T-SQL語句的每一次執行建立一個快取計劃的需求。而且通過建立一個可重用計劃,SQL Server還減少了存放過程快取中類似的執行計劃所需的記憶體使用。
二、引數化查詢意義及注意點
1.可以防止SQL注入
2.可以提高查詢效能(主要是可以複用查詢計劃),這點在資料量較大時尤為重要
3.引數化查詢引數型別為可變長度時(varchar,nvarchar,char等)請指定引數型別及長度,若為值型別(int,bigint,decimal,datetime等)則僅指定引數型別即可
4.傳值為varchar(max)或者nvarchar(max)時,引數長度指定為-1即可