3

c#中的DataSets有一些问题,它表示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);

但它会导致 no-such-row-exception 因为 row1 和 row2 中的错误“Num”值,这与 DB 中的实际自动增量值不同。

  1. 添加行时如何获得 Num 的真实值?
  2. “添加行”->“执行某事”->“删除添加的行”问题是否有更智能的解决方案?

提前致谢。

4

2 回答 2

0

我自己找到了解决方案。首先,我在 DB 中创建了一个 SQL Query,它添加一行并返回一个新行的 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));
于 2013-03-22T07:43:33.650 回答
-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 上的这些链接:

于 2013-03-21T09:53:51.873 回答