Archief - Rij selecteren in DataSet geeft fout via .find

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bram

Legacy Member
Ik was vandaag bezig met een oefening asp.net (vrijdag examen van), maar kwam iets vreemds tegen.
In de een oefening wordt gevraagd om een bestelformulier te maken. In dat formulier zit een keuzelijstje met alle artikels, als je een keuze maakt, dan wordt de prijs weergegeven van dat artikel in een label.

Eerder in de code had ik een dataset al gevuld met alle artikels en dacht dat het maar een kwestie zou zijn van
Code:
objDS.Tables(0).Rows.Find(ddlArtikels.SelectedValue)
te gebruiken om de juiste rij te selecteren. Ik kreeg hier echter de foutmelding "Table doesn't have a primary key.". Ik controleerde dit in Access (oefening draait op een .mdb bestand) en zag wel degelijk een primary key ingesteld staan.

Ik heb het probleem nu zo opgelost:
Code:
            Dim sqlArtikel As String = "SELECT * FROM tblBrillen WHERE brilID = " & ddlArtikels.SelectedValue
            Dim objDA2 As New System.Data.OleDb.OleDbDataAdapter(sqlArtikel, cnnConnection)
            Dim objDS2 As New System.Data.DataSet
            objDA2.Fill(objDS2)

            Dim objDT As System.Data.DataTable = objDS2.Tables(0)
            Dim objRC As System.Data.DataRowCollection

            objRC = objDT.Rows

            Dim row As System.Data.DataRow = objRC.Item(0)
            Dim strPrijs As String = row("prijs")

            lblPrijs.Text = strPrijs
Het werkt perfect, maar het is zo omslachtig. Mss zijn er nog andere manieren om het te doen, maar onze cursus asp.net was maar heel beknopt.

Cycloon

Legacy Member
Je moet ook je adapter instellen om de keys door te geven aan de dataset.

Code:
objDA2.MissingSchemaAction = MissingSchemaAction.AddWithKey;

dan kan je die find wel gebruiken.

Bram

Legacy Member
Code:
Dim strSql As String = "SELECT * FROM tblBrillen"
        Dim objDA As New System.Data.OleDb.OleDbDataAdapter(strSql, cnnConnection)
        Dim objDS As New System.Data.DataSet

        objDA.Fill(objDS)
        objDA.MissingSchemaAction = Data.MissingSchemaAction.AddWithKey
Ik krijg nog altijd dezelfde fout, of hebbek da lijntje ergens verkeerd gezet?

edit: nvm, moet natuurlijk voor de Fill staan...

bedankt voor het snelle antwoord. waarom doet em da feitelijk niet automatisch???

Cycloon

Legacy Member
Dat lijntje moet natuurlijk komen op een plaats voor je je dataset opvult. De laatste en voorlaatste regel dus wisselen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan