c#数据表,删除添加的行

c#数据表,删除添加的行,c#,dataset,sdf,C#,Dataset,Sdf,c#中的数据集存在一些问题,它表示sdf文件中数据库的结构和数据。 我正在用DB进行一些自动测试,所以我应该在表中添加一些行,执行测试并从表中删除添加的行 表架构: Num - ID, autoincrementing, primary key Name - string Photo - Image (binary) 我的代码是: adapter.Fill(set); row1 = datatable.Rows.Add(null, "Name1", File.ReadAllBy

c#中的数据集存在一些问题,它表示sdf文件中数据库的结构和数据。 我正在用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);
但它不会导致这样的行异常,因为第1行和第2行中的“Num”值错误,这与DB中实际的自动递增值不同

  • 当我添加一行时,如何获得Num的真值
  • “添加行”->“执行操作”->“删除添加行”问题是否有更智能的解决方案

  • 提前谢谢。

    我想问题在这里:

    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上的以下链接:

    • 列表项
    • 列表项
      • 我自己找到了解决办法。 首先,我在DB中创建了一个SQL查询,它添加一行并返回一个new row的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;
        私有可空行2;
        row1=适配器.InsertAndReturtIdentificator(“Name1”,File.ReadAllBytes(@“Images\Photo1.jpg”))可为空;
        row2=适配器.InsertAndReturtIdentificator(“Name2”,File.ReadAllBytes(@“Images\Photo2.jpg”))可为空;
        ... 正在执行测试。。。
        Delete(Decimal.ToInt32(row1.Value));
        Delete(Decimal.ToInt32(row2.Value));
        
        我不确定,但我认为datatable.AcceptChanges方法可以在这里用于从datatable.write datatable.AcceptChanges()中删除删除的行;删除行后,请尝试datatable.AcceptChanges();将行添加到DataTable后,若数据库中已有具有“0”或“1”Num字段值的行,则会出现错误。所以我不能这样做。