使用 ef 4.1 或者更新版本, 你可以直接執行任何資料庫命令. 在本節介紹的方法允許你對資料庫執行原生的 sql 命令.
通過 sql 查詢語句獲取實體物件集
dbset 類中的 sqlquery 方法允許你執行乙個返回實體物件集的原生 sql 查詢. 預設情況下, 返回的物件集會被上下文跟蹤; 這可以通過對方法返回的 dbsqlquery 物件呼叫asnotracking方法取消.返回的結果集一般為 dbset 所對應的型別, 否則即便是其派生類也無法返回. 如果所查詢的表包含了其他實體型別的資料, 那麼所執行的 sql 語句應該被正確書寫, 保證只返回指定型別實體的資料. 下面的例子使用 sqlquery 方法執行了乙個 sql 查詢, 返回乙個 department 型別的例項集.
using (var context = new schoolentities())
譯註: asnotracking 方法必須再查詢執行前呼叫, 查詢執行後呼叫無效.
通過 sql 查詢獲取非實體物件集
通過 database 類中的 sqlquery 方法來執行原生 sql 命令, 可以返回任何型別的例項, 包括 .net 中的原生型別. 但獲取的資料將不會被上下文物件跟蹤, 即使我們用這個方法來檢索實體物件. 如:
using (var context = new schoolentities())
讓資料庫執行原生的非查詢 sql 命令
可以通過 database 類中的 executesqlcommand 方法執行非查詢命令. 例如:
using (var context = new schoolentities())
executesqlcommand 方法有時會被用在 code first 建立的資料庫的初始化函式中, 用來對資料庫進行一些額外的配置 (例如, 設定索引). 需要注意的是, 上下文物件並不知道執行了 executesqlcommand 方法後資料庫中的資料有什麼改變, 除非你從資料庫中載入或重新載入實體集.
呼叫儲存過程
code first 並不支援對儲存過程的對映. 但是, 你可以通過 executesqlcommand 或 sqlquery 方法直接呼叫儲存過程. 例如: context.database.executesqlcommand ("execute [dbo].[dosomething]").
譯註: 本文提到的三個方法 (dbset.sqlquery, database.sqlquery, database.executesqlcommand) 都支援引數化查詢, 用法和 string.format 類似, 但是在查詢執行時會對傳入的引數進行型別轉換. 如: context.departments.sqlquery("select * from department where departmentid = ", "6"); 該語句執行時, 會將字串 "6" 轉化為整數然後再代入查詢語句中執行, 可以有效防止 sql 注入.
防止 sql 注入攻擊
應用程式經常要從外部獲取輸入 (來自使用者和其他外部**) , 然後根據這些輸入執行相關操作. 從使用者或外部**直接或間接獲取的任何資訊都可能利用目標程式語言的語法來執行違法操作. 當目標語言是結構化查詢語言 (sql) 時, 例如 transact-sql, 這個操作被稱為 sql 注入攻擊. 惡意的使用者可以直接在查詢中注入命令執行操作, 刪除資料庫中的乙個表, 拒絕提供服務或修改正在執行的操作的性質. 故你應該使用引數化的查詢, 而不是直接將從外部獲取的字串插入到查詢字串中.
翻譯 直接執行資料庫命令
原文 翻譯 直接執行資料庫命令 純屬學習上的記錄,非專業翻譯,如有錯誤歡迎指正 使用 ef 4.1 或者更新版本,你可以直接執行任何資料庫命令.在本節介紹的方法允許你對資料庫執行原生的 sql 命令.通過 sql 查詢語句獲取實體物件集 dbset 類中的 sqlquery 方法允許你執行乙個返回實...
翻譯 直接執行資料庫命令
純屬學習上的記錄,非專業翻譯,如有錯誤歡迎指正 使用 ef 4.1 或者更新版本,你可以直接執行任何資料庫命令.在本節介紹的方法允許你對資料庫執行原生的 sql 命令.通過 sql 查詢語句獲取實體物件集 dbset 類中的 sqlquery 方法允許你執行乙個返回實體物件集的原生 sql 查詢.預...
資料庫命令執行Getshell
access可匯出 等檔案需要配合解析漏洞 create table cmd a varchar 50 insert into cmd a values 一句話木馬 一句話木馬如 select into a in e web webshellcc 1.asa x.xls excel 4.0 from...