Avatar billede ssboisen Nybegynder
17. november 2006 - 16:33 Der er 4 kommentarer

Problemer med Primary Keys i DataTable ( ADO.Net )

Hej,

Jeg sidder og arbejder med database tilgang via ADO.NET og har opbygget en controller via factory patternet som jeg benytter til min forbindelse. Jeg har ingen problemer med at læse data fra server men når jeg vil benytte Update() kommandoen på min adapter får jeg problemer.

På nuværende tidspunkt er problemet at jeg ikke kan få lov til at sætte en primær nøgle på min datatabel. Efter hvad jeg har kunnet læse mig frem til på msdn er det nødvendigt at have en primærnøgle for at kunne benytte sig af DbCommandBuilderen. Jeg får følgende exception:

----
An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll

Additional information: These columns don't currently have unique values.
----

Det burde bare ikke være rigtigt eftersom rækken LogID er primærnøgle og derfor også unique på databasen. Hvor opstår fejlen som forudsager denne exception?


----
Mine kode er som følger:

//henter data ind i collection
dataTableCollection = dbController.ReadData("select LogID, Maal1, Maal2, Maal3, Vaegt, Starttid, Sluttid, Dato, Farve from Sortering");

//Prøver at sætte primaryKey
dataTableCollection[0].PrimaryKey = new DataColumn[] { dataTableCollection[0].Columns["LogID"] };
----
Avatar billede jimgordon Nybegynder
18. november 2006 - 11:42 #1
Er feltet LogID sat som en primærnøgle i database? Hvis den er det vil ADO.NET ikke kastet en exception når du prøver at lave en promærnøgle. Det du kalder en dataTableCollection er det et dataset? Det er nok et mere passende navn, da din collection kan indeholde meget andet en tabeller hvis det da er et dataset.
Avatar billede ssboisen Nybegynder
18. november 2006 - 13:42 #2
LogID er primærnøgle i databasen, ja.

jeg har ændret koden for kun at bruge dataset, men resultatet er det samme

-------
ds = dbController.ReadData("select LogID, Maal1, Maal2, Maal3, Vaegt, Starttid, Sluttid, Dato, Farve from Sortering");

//Prøver at sætte primaryKey
ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["LogID"] };
--------
Avatar billede jimgordon Nybegynder
18. november 2006 - 14:38 #3
Skal du ikke dimensionere din DataColumn til 1:

ds.Tables[0].PrimaryKey = new DataColumn[1] { ds.Tables[0].Columns["LogID"] };

Jeg har følgende lidt mere gennemskugeligt kode kørende uden problemer:

        public DataSet GetElementUnitRestriction()
        {
            string sql = "SELECT Element, Unit FROM Element";
            DataSet ds = DABasic.ExecuteDataSetQuery(sql);

            DataColumn[] pk = new DataColumn[1];
            pk[0] = ds.Tables[0].Columns["Element"];

            ds.Tables[0].PrimaryKey = pk;
            return ds;
        }
Avatar billede ssboisen Nybegynder
18. november 2006 - 14:49 #4
i mine øjne burde det være det samme, desuden så fulgte jeg et eksempel fra msdn hvor de nettop tilføjede primærnøglen på den måde
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester