2014-03-26 106 views
3

試圖找到答案已被證明是困難的,因爲所有答案都與SQL有關!Datatable/Datarow如果存在更新否則插入

我有一個Datatable TestTable。在此DataTable中,我有三列,分別爲ID,ValueXValueY。當我向這個數據表添加新記錄時,我試圖做一個插入方法來查看記錄是否存在,但不能讓Select語句使用多個字段。在我的情況下,我需要查看Datatable是否包含等於ID和ValueX的記錄,如果有,則更新。否則,將新記錄添加到數據表。

public void Insert(string ID, string ValueX, string ValueY) 
{ 
DataRow dr = TestTable.NewRow(); 
dr["ID"] = ID; 
dr["ValueX"] = ValueX 
dr["ValueY"] = ValueY; 
TestTable.Rows.Add(dr); 
} 
+0

那麼,有什麼問題呢?你想在一次交易中做到這一點?你不知道如何構建SQL查詢?或者你希望更新發生在內存中? – Neolisk

+0

我試圖讓更新發生inmemory,並且我不確定如何編寫查詢來檢查這兩個字段。 – user3010406

+0

我看到你剛剛接受了一個答案。也請考慮加強它,給作者更多的功勞。在StackOverflow上通常的做法是接受並提供您認爲最有用的答案。獲得15點聲望後,你應該可以開心投票(所以你已經擁有這個權限)。 – Neolisk

回答

3

可以使用Find method

DataRowCollection.Find方法(對象[])

獲取包含指定主鍵值的行。

找一個特定的DataRow。請注意,您的DataTable必須具有適當的主鍵。

例子:

// create Table with ID, ValueX, ValueY 
var table1 = new DataTable(); 
var id = table1.Columns.Add("ID"); 
var x = table1.Columns.Add("ValueX"); 
var y = table1.Columns.Add("ValueY"); 

// set primary key constain so we can search for specific rows 
table1.PrimaryKey = new[] {id, x}; 

// some sample data 
table1.Rows.Add(new Object[] {1, 1, 100}); 
table1.Rows.Add(new Object[] {2, 2, 200}); 

// find the row with key {1, 1} and update it, if it exists 
// else you would want to create a new row 
var exisiting = table1.Rows.Find(new Object[] {1, 1}); 
if (exisiting != null) 
    exisiting.ItemArray = new object[] {1, 1, 9999}; 
相關問題