C# DataTable,删除已添加的行

3

我在使用c#中的DataSets时遇到了一些问题,它代表了sdf文件中数据库的结构和数据。

我正在进行一些自动化测试,因此我需要向表中添加一些行,执行测试并从表中删除添加的行。

表结构如下:

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);

由于行1和行2中的“Num”值与数据库中实际自增值不同,因此会导致“无此行异常”。

  1. 我如何在添加行时获取正确的“Num”值?
  2. 是否有更智能的解决方案来避免“添加行” -> “执行某些操作” -> “删除添加的行”问题?

提前感谢您的帮助。


我不确定,但我认为datatable.AcceptChanges方法可以用于从datatable中删除已删除的行。在删除行之后,写入datatable.AcceptChanges()。 - Mogli
在向数据表添加行之后,尝试使用datatable.AcceptChanges()。 - freshbm
2个回答

0

我自己找到了解决方案。 首先,我在数据库中创建了一个SQL查询,它会添加一行并返回新行的Num值:

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

我称它为“InsertAndReturnIdentificator”。然后我直接使用适配器插入(使用这个新查询)和删除行,而不使用数据集。

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”或“1”的Num字段值的行,那么就会出现错误。因此不能这样做。 - Aleksei Petrov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接