c#DataTable,删除添加的行

时间:2013-03-21 09:46:29

标签: c# dataset sdf

在c#中有一些DataSet的问题,它表示sdf文件中DB的结构和数据。 我正在使用DB进行一些自动测试,所以我应该在表中添加一些行,执行测试并从表中删除添加的行。

表架构:

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中的错误“Num”值与DB中的实际自动增量值不同,因此导致无行异常。

  1. 当我添加一行时,如何才能获得Num的真值?
  2. 是否有“添加行”的更智能的解决方案 - > “执行某些事情” - > “删除添加的行”问题?
  3. 提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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 :(得分:-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上查看这些链接: