2014-10-10 96 views
1

有沒有辦法在調用之前如何查找語句是否有效?例如,當您嘗試刪除不存在的列或當您嘗試刪除刪除通過外鍵鏈接的記錄,並且您被禁止刪除它時。像點擊解析(Ctrl + F5)按鈕,但從代碼調用。 (理想情況下是可能通過使用command class從C#代碼中調用它。)有沒有辦法在調用之前檢查操作是否有效?

喜歡的東西

Exec sp_canIdoIt("SQL statement"). 

,而不實際調用語句「SQL語句」。

我做了一些谷歌搜索和

PARSE導致完全不同的東西。

CTRL+F5快捷鍵並沒有多大幫助。

我真的很想能夠調用數據庫,並確保它不會返回給我一個錯誤。

+0

爲什麼不直接處理錯誤,如果他們發生? – 2014-10-10 13:48:08

+1

ADO.NET無法看到未來。如何在不詢問數據庫的情況下知道它是否存在? – 2014-10-10 13:48:35

+2

在事務中執行此操作並回滾您的更改。 – mreiterer 2014-10-10 13:48:52

回答

3

您可以執行事務並回滾更改,但仍然會返回錯誤。

我想也許你在考慮這個錯誤。

可以使用try-catch塊處理或不處理SqlException塊。爲什麼不只是處理錯誤情況而不是執行奇怪的僞邏輯來測試某些東西的有效性呢?您可以讓您的功能根據您的錯誤返回成功狀態。

如果您在connection.Open()上獲得SqlException,那麼您的數據庫將無法訪問。如果在提交查詢時收到SqlException,則查詢存在問題。只要處理這種情況,返回某種錯誤結果枚舉,並用它做其他事情。

2

還有的一種方式,那就是用NOEXEC。但是 - 不要將我的投票作爲公認的答案投票,因爲C Bauer所建議的是正確的方式 - 在代碼中捕獲這些例外並採取行動。這是我們給錯誤處理的原因。

但是,如果由於某種原因,您將SSMS查詢分析器重新設計爲您自己的小應用程序,這裏就是NOEXEC的一篇文章。

http://www.adathedev.co.uk/2010/07/validating-sql-query-programmatically.html

How can I programmatically check (parse) the validity of a TSQL statement?

相關問題