在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中的实际自动增量值不同,因此导致无行异常。
提前致谢。
答案 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上查看这些链接: