2012-04-11 27 views
2

我從我的數據庫使用自定義存儲過程中檢索數據:爲什麼SubmitChanges不起作用?

tbTextBox.Text = db.getSettingValue("PropertyName").First().Value; 

(DB是一個全球性的DataClasses對象,在FormLoad事件初始化)

這部分工作完全沒問題,它的重複一個環(在計時器30秒的間隔)

如果用戶更改的文本框的值,下面的代碼被觸發:

private void tbTextBox_TextChanged(object sender, EventArgs e) 
{ 
    if (tbTextBox.Text != db.getSettingValue("PropertyName").First().Value) 
    { 
       db.Settings.Where(n => n.Name == "PropertyName").First().Value = tbTextBox.Text; 
       db.SubmitChanges(); 
    } 
} 

如果我在submitChanges之前創建對象並更改其值 - 結果相同。我已經調試過它,它不像它從來沒有通過我的IF語句;)

爲什麼它不工作?在那裏沒有例外...如果我使用SQL Server Management Studio查詢Settings表,那麼數據庫中沒有任何更改。

EDIT1:

db.Settings.Where(n => n.Name == "AvailablePeriods").First().Value = tbPeriods.Text; 

var a = db.Settings.Where(n => n.Name == "AvailablePeriods"); 
var b = a.First(); 
var c = b.Value; 

b.Value = tbPeriods.Text; 

var d = db.GetChangeSet(); 

db.SubmitChanges(); 

我爲了正確調試它劃分代碼較小的步驟。一切工作正常,但... Changeset沒有返回更新。下一步我會嘗試按照建議使用「附加」。

編輯2: 添加PK解決了這個問題。現在一切都充當魅力。

課學 - 我不應該相信自己太多:)

+1

datacontext日誌說什麼? – leppie 2012-04-11 14:31:36

+1

_'it就像它從來沒有通過我的IF語句'__你有沒有調試並確認正在執行的事件處理程序,以及是否正在評估條件? – 2012-04-11 14:31:54

+0

它不是像...錯字 - 對不起 – 2012-04-11 14:34:55

回答

3

直接更新Data Context的數據不是更新表的方法。如果數據已經存在,則使用Attach Method;如果不存在,則使用InsertOnSumit

1

這個紀錄:

db.getSettingValue("PropertyName").First() 

可能是不一樣的,因爲這記錄:

db.Settings.Where(n => n.Name == "PropertyName").First() 

您在未指定訂單的情況下調用First,因此數據庫可以選擇並且不必選擇一致性年。


您應該少用一行,以便您在逐步執行代碼時獲得更多信息。


它重複在循環中(在計時器30秒的間隔)

是,在不同的線程? tbTextBox.Text的值是否在執行if-criteria和if-block之間發生變化?

+0

兩個記錄都是一樣的,因爲這個表中只有2行。此外,第一列是獨一無二的,所以我將來不會被誤解。 – 2012-04-11 14:59:21

+0

我使用First(),只告訴調試器/編譯器它是一個對象,所以我可以在我手中獲得VALUE :) – 2012-04-11 14:59:58

+0

我將禁用TIMER以查看後續queriess是否影響代碼... – 2012-04-11 15:01:23