第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅當(dāng)具有特定列值的新行插入到 MS SQL 中時才觸發(fā) C# 依賴關(guān)系

僅當(dāng)具有特定列值的新行插入到 MS SQL 中時才觸發(fā) C# 依賴關(guān)系

C#
繁花不似錦 2022-11-13 14:45:07
當(dāng)使用特定列值將新行插入到 MS SQL 中時,我想收到一個“更改”事件。下面是我目前使用的代碼,它工作得很好,除了它會在 [Status] 列中的任何行值更改為/或從“NEW”時觸發(fā)一個事件。public void InitialiseDependencyWORK(Action onDependencyMethod){    this.onDependencyMethod = onDependencyMethod;    string sqlCommandText = "SELECT [Symbol] FROM [JJ].[Orders] WHERE [Status] = 'NEW'";    using (SqlCommand command = new SqlCommand(sqlCommandText, conn))    {        Dependency = new SqlDependency(command);        Dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);        using (SqlDataReader reader = command.ExecuteReader())        {            // Process the DataReader.        }    }}void OnDependencyChange(object sender,   SqlNotificationEventArgs e){    // Handles NEW rows}我只對使用 [Status] = "NEW" 插入新行感興趣,但是當(dāng)沒有新插入但 [Status] 已從“NEW”更改為其他任何內(nèi)容時,此事件也會觸發(fā)。如何只有在有新的插入時才得到觸發(fā)事件?我想在插入新聞行時收到觸發(fā)事件,如下面的第 2 行:OrderID, Status 1,Done 2,NEW 我不希望它觸發(fā),因為第 2 行剛剛更新了其狀態(tài) - 實(shí)際上沒有要處理的新行:OrderID, Status1,Done2,Done我怎樣才能做到這一點(diǎn)?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗 獲得超4個贊

using 的一般用例SqlDependency是檢測您希望緩存的不經(jīng)常更改的數(shù)據(jù)更改,但還需要知道它是否確實(shí)更改,以便您可以刷新緩存而無需輪詢數(shù)據(jù)庫。您的情況略有不同,因為您真的不想知道該查詢的結(jié)果何時發(fā)生變化......您想知道某個查詢何時包含要處理的結(jié)果。當(dāng)狀態(tài)代碼從“NEW”更改為 AND 時您收到通知的原因是因為這兩種類型的更改都會改變查詢結(jié)果。它根據(jù)兩種變化添加和減去整行。

如果您只使用狀態(tài)代碼“NEW”和“DONE”,并且保證它們始終啟動為“NEW”并且只前進(jìn)到“DONE”(并且永遠(yuǎn)不會返回),那么解決方法可能是使用此查詢:

SELECT [OrderID] FROM [JJ].[Orders] WHERE [Status] <= 'NEW'

這樣,在狀態(tài)“NEW”中添加的新項目將更改查詢結(jié)果......但是當(dāng)它移動到“DONE”時,它仍然會OrderID在查詢中返回,并且不應(yīng)觸發(fā)更改事件。如果你有更多的狀態(tài)值,你會進(jìn)步……你可以考慮在你的狀態(tài)欄中使用一個整數(shù)來表示進(jìn)步。例如 0 表示新的,1 表示進(jìn)行中,2 完成...等。

聽起來您正在嘗試創(chuàng)建某種待完成的工作隊列,并且還有其他方法可以執(zhí)行此類操作。有 SQL Server 更改跟蹤和數(shù)據(jù)更改跟蹤、觸發(fā)器、Service Broker 隊列和許多其他隊列技術(shù)。您可能會檢查它們以及您的體系結(jié)構(gòu)的選項。


查看完整回答
反對 回復(fù) 2022-11-13
?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊

請問您為什么要在 c# 中為上下文重新發(fā)明 SQL 觸發(fā)器? https://learn.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-2017

最簡單的解決方案是在表本身捕獲它,而不是通過會產(chǎn)生誤報的查詢。

或者,如果您通過存儲庫層運(yùn)行所有代碼,那么您應(yīng)該能夠?qū)?INSERT 與 UPDATE 區(qū)分開來,并從那里選擇它。


查看完整回答
反對 回復(fù) 2022-11-13
?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗 獲得超4個贊

我認(rèn)為只要表中有任何插入/更新/刪除,就會觸發(fā) SqlDependency 事件。


沒有辦法阻止它。


您可以在事件中捕獲適當(dāng)?shù)耐ㄖ愋筒㈤_始工作。


void OnDependencyChange(object sender,

   SqlNotificationEventArgs e)

{

    if (e.Info == SqlNotificationInfo.Insert)

}

我沒有嘗試過的其他方式,


創(chuàng)建另一個表OrdersCopy ,它是[JJ].[Orders]


在訂單表中創(chuàng)建插入觸發(fā)器。


只要在 Order 表中有插入,觸發(fā)器就會觸發(fā)。將新記錄插入OrdersCopy


這里做如下改動,把表名改成OrderCopy


string sqlCommandText = "SELECT [Symbol] FROM [JJ].[OrdersCopy] WHERE [Status] = 'NEW'";

對于實(shí)驗搖晃,您可以嘗試一次。


OnDependencyChange事件只會在插入的情況下觸發(fā)。


查看完整回答
反對 回復(fù) 2022-11-13
  • 3 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號