2013-03-21 35 views
3

在c#中的DataSets中存在一些問題,它代表了sdf文件中DB的結構和數據。 我正在做一些使用DB的自動測試,所以我應該在表中添加一些行,執行測試並從表中刪除添加的行。c#DataTable,刪除已添加的行

表模式:

Num - ID, autoincrementing, primary key 
Name - string 
Photo - Image (binary) 

我的代碼是:

adapter.Fill(set); 
    row1 = datatable.Rows.Add(null, "Name1", File.ReadAllBytes(@"Images\photo1.jpg")); 
    row2 = datatable.Rows.Add(null, "Name2", File.ReadAllBytes(@"Images\photo2.jpg")); 
    adapter.Update(set); 

    ... perfoming test... 

    adapter.Fill(set); 
    row1.Delete(); 
    row2.Delete(); 
    adapter.Update(set); 

但添加的行仍然在基地。我試圖使用

datatable.Rows.Remove(row1); 
datatable.Rows.Remove(row2); 

,但它會導致由於ROW1和ROW2錯誤的「民」的價值觀,這是從DB實際值自動遞增不同的無此行例外。

  1. 如何在添加一行時獲得Num的真實值?
  2. 有更聰明的解決方案「添加行」 - >「執行某些操作」 - >「刪除添加行」問題?

在此先感謝。

+0

我不知道,但我認爲datatable.AcceptChanges方法能在這裏工作從數據表中移除刪除的行。寫datatable.AcceptChanges();刪除行後。 – Mogli 2013-03-21 09:50:23

+0

Try datatable.AcceptChanges();將行添加到數據表後 – freshbm 2013-03-22 06:43:51

回答

0

我找到了解決自己。所有的 首先,我創建了一個SQL查詢的數據庫,其中添加一行並返回新行的民值:

INSERT INTO [Table] ([Name], [Photo]) VALUES (@Name, @Photo); 
SELECT @@IDENTITY 

我把它叫做「InsertAndReturnIdentificator」。然後我用插入(這個新的查詢)和適配器直接刪除行,不使用DataSet

private Nullable<decimal> row1; 
private Nullable<decimal> row2; 

row1 = adapter.InsertAndReturtIdentificator("Name1", File.ReadAllBytes(@"Images\Photo1.jpg")) as Nullable<decimal>; 
row2 = adapter.InsertAndReturtIdentificator("Name2", File.ReadAllBytes(@"Images\Photo2.jpg")) as Nullable<decimal>; 

... performing test ... 

adapter.Delete(Decimal.ToInt32(row1.Value)); 
adapter.Delete(Decimal.ToInt32(row2.Value)); 
-1

我想問題就在這裏:

row1 = datatable.Rows.Add(null, "Name1", File.ReadAllBytes(@"Images\photo1.jpg")); 

嘗試以取代您的語句:

int i = 0; 
datatable.Rows.Add(i++, "Name1", File.ReadAllBytes(@"Images\photo1.jpg")); 
datatable.Rows.Add(i++, "Name2", File.ReadAllBytes(@"Images\photo2.jpg")); 

而且隨着

datatable.Rows[i].Delete(); 

刪除檢查出來的這些鏈接MSDN:

+0

如果數據庫已經有「0」或「1」Num字段值的行,則會出現錯誤。所以不能這樣做。 – 2013-03-22 05:55:28