2013-11-04 89 views
1

我正在開發一個使用C#的Windows應用程序。我想在新行插入特定表格時顯示氣球通知。該應用程序將安裝在許多計算機上,並將通過LAN共享一個公用數據庫。目前我正在使用輪詢來實現這一點。也就是說,應用程序將每秒鐘查詢數據庫表以檢查是否插入了新行。請告訴我這是否是正確的方法,還是有更好的方法?我知道使用觸發器,我們可以在SQL服務器中執行查詢以進行表插入,但是是否可以從SQL Server中將特定應用程序發送回特定應用程序,並將新行插入表中?請幫忙在表格插入時顯示窗口氣球通知

+0

非常開放的問題......有很多方法!您是否擁有中央服務,或者每個請求中的所有客戶端都訪問了數據庫? – Belogix

+1

每秒輪詢數據庫可能對性能不利。就我個人而言,我會考慮有一個處理通知並將它們傳遞給所有連接的應用程序的Windows/Web服務。因此,當您的應用程序的一個實例插入一行時,它會通知該服務,然後該服務會向所有其他連接的(偵聽)應用程序發出通知。祝你好運! – musefan

+0

@Belogix謝謝。我沒有中央服務。所有的客戶端都會查詢數據庫。請讓我知道最好的方法。我如何創建一箇中央服務? – user1690835

回答

2

我想你可以用SQL CLR觸發器和Win32 API函數的組合來實現這個功能。使用CLR觸發器將有助於避免輪詢。

Here's an MSDN article關於編寫CLR觸發器。

顯示的示例代碼正在記錄到某個審計表。交換該部分以調用Shell_NotifyIcon Win32 API函數。 Here's a sample from MSDN on using the Shell_NotifyIcon顯示氣球通知。

實際示例代碼是on this page(搜索notificationicon.zip)並使用C++編寫,但是一旦執行了DLL導入並使用PInvoke,就應該可以對其進行修改。有關更多信息,請參閱this SO thread

+0

我是否正確理解這一點:此CLR觸發器會通知**插入應用程序的任何**實例?或者它只會通知啓動插入的實例? –

+0

我還沒有測試過它,但我認爲它只會通知啓動插入的實例。爲了廣播它,我想知道是否可以在客戶端可以訂閱的CLR函數中引發一個事件,並且在這種情況下,執行氣球通知。 – Shiva

+0

那麼也許你應該擴大你的答案。 OP正在使用輪詢,這很可能意味着他們希望檢測*任何*新的插入到表中。 –