Dapper如何幫助防止SQL注入?
這使得完全參數化數據訪問變得非常非常容易,無需連接輸入。特別是,因為你並不需要通過大量的“20參數添加參數,設置參數類型,檢查空,因為ADO.NET有蘇茨基空處理 ,沖洗/重複”地跳,通過使參數處理愣神方便。它還使得將行轉換為對像變得非常簡單,避免了使用DataTable的誘惑...每個人都獲勝。
來自評論:還有一個......那個小巧玲瓏實際上有什麼幫助呢?
回答一下,讓我們以marc_s的回復為例,並以舊的方式編寫,假設我們必須從頭開始就是connection 。這是:List dogs = new List();
using(var cmd = connection.CreateCommand()) {
cmd.CommandText = "select Age = @Age, Id = @Id";
cmd.Parameters.AddWithValue("Age", DBNull.Value);
cmd.Parameters.AddWithValue("Id", guid);
using(var reader = cmd.ExecuteReader()) {
while(reader.Read()) {
int age = reader.ReadInt32("Age");
int id = reader.ReadInt32("Id");
dogs.Add(new Dog { Age = age, Id = id });
}
while(reader.NextResult()) {}
}
}
除了我過分誇大,因為它還涉及廣泛的問題,如:null處理參數
null處理結果列
使用序數列索引
適應基礎表和類型的結構變化
結果列的數據轉換(在各種基元,字符串,枚舉等之間)
特殊處理哦這麼常見的“在此列表中”場景
對於“執行”,特殊處理“將此單獨應用於輸入列表”
避免愚蠢的錯別字
減少代碼維護
處理多個網格
處理在單個網格中水平返回的多個對象
使用任意ADO.NET提供程序(提示: AddWithValue很少存在) 包括對Oracle等需要額外配置的東西的特定支持
與ADO.NET decoratos很好地配合,例如“mini-profiler”
內置支持緩衝(適用於小到中等數據;最小化命令持續時間)和非bufferesd(適用於大數據;最小化內存使用)訪問
由關心性能的人優化,並且對數據訪問和元編程都非常了解
允許您使用您選擇的POCO / DTO / anon-type /無論參數和輸出如何
當輸出不保證生成POCO / DTO時,允許使用dynamic (對於多列)或基元等(對於單列)
避免複雜的完全類型的ORM(如EF)的開銷
避免像DataTable這樣的弱類型層的開銷
根據需要打開和關閉連接
以及其他一系列常見問題