我想知道這是否可能。當特定表中的值更新時,我們希望函數能夠在我們的.NET代碼中工作。這可能是在記錄插入或更新時。這可能嗎? 如果沒有,是否有其他過程?在表更新,在我的.NET代碼中觸發一個動作
回答
你需要問幾個問題。
你想在數據庫級別的業務邏輯嗎? 很明顯,一個數據庫觸發器可以做到這一點(當值改變時執行一些操作,即使只有非常具體的值)。
我見過一些系統,數據庫觸發沉重。他們的'邏輯'與db平臺息息相關。這樣做有一些優點,但大多數人可能會說缺點太大了(耦合,缺乏封裝/可重用性)。
取決於你在做什麼和你的傾向你可以:
確保所有的DAO/BusinessFunctoin對象調用你的「事件」
object.function
做的時候一定值發生變化時,你想要什麼。當某個值發生變化時,使用觸發器調用您的'事件'
object.function
。您的觸發器可以完成所有功能。
我個人的偏向選項2,你有一個最小的觸發器(它只是觸發事件調用您的object.function
),這樣你就不會深深的情侶你的數據庫到你的業務邏輯。
選項1是好的,但可能有點麻煩,除非你有一個非常窄的BF/DAO的談話這個數據庫table.field你想看。
選項3是imho最糟糕的選擇,因爲您將邏輯耦合到數據庫並降低其對業務邏輯層的可訪問性。
鑑於此,這裏是朝着通過選項2完成一些這方面的信息:
使用從MSDN這個例子:http://msdn.microsoft.com/en-us/library/938d9dz2.aspx。
這顯示瞭如何讓一個觸發器運行並在項目中調用一個CLR對象。
實際上,在您的項目中,您將創建一個觸發器並讓它調用您的類。
通知行:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
這定義了代碼大火,然後內的代碼,你可以檢查你的約束,那麼火的方法(或沒有)的其餘部分,或者調用另一個object.method
需要。
直接進入數據庫並添加觸發器的主要區別在於,您可以在部署到一起時訪問項目中的所有對象。
2)當某個值發生變化時,使用觸發器來調用你的'event'object.function。問題是我們該如何做到這一點?! – alwaysVBNET
下面是從MSDN的例子: http://msdn.microsoft.com/en-us/library/938d9dz2.aspx 實際上,在你的項目,你創建一個觸發,並有它調用你的類。注意行: 這個定義了當代碼在代碼中觸發時,你可以檢查你的約束條件,然後觸發該方法的其餘部分或根據需要調用另一個object.method。 直接進入數據庫和添加觸發器的區別在於,您可以在部署到一起時訪問項目中的所有對象。 – williambq
這實際上非常好,可能比其他解決方案更好。你可以回答這個問題,我會接受它。非常感謝 – alwaysVBNET
- 1. 如何在MySQL表中更新後觸發一個動作?
- 2. Cassandra觸發器在更新另一個表時更新表格
- 3. mysql觸發器在更新我的表中有一些問題
- 4. 在一個表上寫入觸發器1更新表2和觸發器在表2上更新表格1
- 5. 觸發器更新另一個表
- 6. 觸發器更新另一個表
- 7. 觸發另一個表更新行
- 8. SQL觸發器更新另一個表
- 9. 觸發更新另一個表
- 10. 在同一個表中更新/插入觸發器
- 11. 創建觸發器,更新時,另一個表中的列被更新在一個表中的列
- 12. 在一個表格中使用觸發器並更新另一個表格
- 13. 更新一個在觸發器列在SQL Server中的同一個表只更新特定的列後,2008年
- 14. 在同一個表上更新後的MySQL觸發器
- 15. 在插入並更新後在觸發表中更新字段
- 16. 我想通過觸發更新表列,在另一個表中是相同的更新
- 17. 代碼觸發一個斷點,但我在所有
- 18. 觸發器在更新另一個表時將數據插入到新表中
- 19. 兩個觸發器,我在更新表時遇到錯誤
- 20. 觸發更新表
- 21. 創建一個觸發器,用於在同一表中的不同列更新時更新表中的列 - SQL
- 22. SQL觸發器 - 每當另一個數據庫中的另一個表正在更新時如何更新表?
- 23. 我想要一個按鈕在不同的視圖中觸發一個動作
- 24. 新老觸發代碼
- 25. 如何觸發一個表並更新同一個表?
- 26. .NET新代碼是否在新版本中更新?
- 27. 在更新觸發在oracle?
- 28. 在.NET中的代碼中更改UserAgent
- 29. 當另一個表插入或更新時,Oracle觸發器更新一個表
- 30. Oracle觸發器更新列在同一個表
爲什麼不在數據庫端添加一個觸發器..?這將是我的第一個方法,你不必做任何不必要的往返數據庫,也請你的問題更詳細 – MethodMan
DJ KRAZE方法不是一個糟糕的呼喊。代碼是否必須立即執行?如果不是,您可以使用觸發器更新某種形式的登臺表,然後創建一個針對該表運行的獨立控制檯應用程序,檢查發生了哪些變化,並根據預定義的預定時間運行特定的代碼。 – Modika
@Modika這是我們最初的想法。但是,這取決於我們在該應用程序上設置的時間間隔。但是,我們確實需要立即運行代碼。 – alwaysVBNET