Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

DataTable.LoadDataRow verandert ID van bestaand record

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 12:18
Ik loop hier tegen een vreemd probleem aan, ik gebruik DataTable.LoadDataRow om een DataRow te inserten/updaten. Uit de MSDN:
Finds and updates a specific row. If no matching row is found, a new row is created using the given values.
Dit is de code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
object[] values = new object[]
    {
        null, // Id 
        product.ProductType,
        product.ExpirationDate,
        product.Strike,
        product.OptionType,
        product.Symbol,
        null,
        1
    };
DataRow row = _ds.Products.LoadDataRow(values, false);

Als ik voor de LoadDataRow in _ds.Products kijk, staat het product er gewoon goed in met Id 5. Na de LoadDataRow heeft hij de RowState.Modified en Id 6.
De primary key bestaat uit ProductType, ExpirationDate, Strike, OptionType en Symbol en Id is een int, auto increment met een unique index. Ik snap echt niet waarom dit gebeurd, met andere tabellen werkt het vlekkeloos, en ook deze tabel heeft het goed gedaan totdat ik ID hernoemde naar Id. Iemand een idee?

Roomba E5 te koop


Verwijderd

Wanneer je geen synthetische primary key gebruikt (PK op 5 velden), waarom gebruik je dan een autoincrement/identity field? Om je database en ontwikkelomgeving in de war te brengen?

Maak dat identity field primary key, en zet een paar goede indexen op die 5 velden. Je database zal je dankbaar zijn!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 12:18
Een synthetishe PK is in dit geval helaas onmogelijk, en waarom zou m'n ontwikkelomgeving daarvan in de war raken? Hij gebruikt gewoon de PK om het record op te halen. Ik heb overigens zojuist de oplossing gevonden.
C#:
1
DataRow row = _ds.Products.LoadDataRow(values, false);

Vervangen door
C#:
1
DataRow row = _ds.Products.LoadDataRow(values, LoadOptions.Upsert);

does the trick, had even gemist dat er nog een overload was.

Roomba E5 te koop