如果我有一個Dapper.NET查詢,像這樣:的Visual Studio編譯時SQL驗證
conn.Execute("insert into My_Table values ('blah', 'blah, 'blah', 'blah')");
我怎麼能強迫視覺工作室做編譯時該查詢驗證針對某一數據庫模式?我知道有庫可以做查詢驗證(提供了一個字符串和連接),但是這裏的工作是什麼正確的工具?
擴展Roslyn檢查字符串我標記爲查詢字符串(語法類似於熟悉的@「非轉義字符串」)?自定義預處理?
或者我問錯了問題?將數據庫項目中的存儲過程中的所有查詢邏輯封裝起來會更安全(這使我能夠驗證查詢本身)?現在我寫下來,我想我會用這個解決方案,但我仍然對上述問題感到好奇。我希望能夠寫出:
conn.Execute(#"insert into My_Table values ('blah',
'blah, 'blah', 'blah')"); //Hashtag to mark as query
並讓編譯器根據給定的數據庫模式驗證字符串。
爲什麼不使用單元測試庫創建一些庫的測試?這將允許您傳遞受控數據並測試結果。 –
我同意單元測試會讓我的問題沒有意義,但我仍然認爲從編譯時檢查中可以得到一些東西(尤其是因爲它會是完全自動的,並且永遠不會從我的代碼中移除一個主要的錯誤來源,參與)。不幸的是,我是個獨立開發者。 – user3527893
最好的方法是避免首先將臨時查詢發送到服務器。在SQL存儲過程中執行所有操作(正如您在最後所建議的那樣)是處理此問題的最佳方法。您不僅可以驗證您的SQL,還可以更好地保護您的SQL服務器免受攻擊。 – DunningKrugerEffect