Avatar billede Slettet bruger
06. juni 2006 - 23:51 Der er 5 kommentarer og
1 løsning

Noget rod med arraylist og database

Hej

Jeg laver en arraylist, som jeg flytter sammen med andet data som ét objekt.
Jeg vil senere bruge det i forbindelse med at jeg skal putte det i en database, men den bliver ved at med at komme med følgende fejl:

Object reference not set to an instance of an object og peger på følgende linie:

i = objdata.HandlingsArraylist.Count

Det underlige er, at jeg har haft det til at virke, men så skulle jeg prøve at lave det om til hashtable og så gik det galt.

Det samlede ser ud som følger:

Public Function CreateAfvigelse(ByVal objdata As Afvigelse) As Object Implements IAfvigelse.CreateAfvigelse

                Dim DBConn As DataHelperClass = New DataHelperClass
                Dim Conn As OleDbConnection = DBConn.GetConnection()
                Dim SqlCmd As OleDbCommand
                Dim SqlInsert As String
                SqlInsert = "Insert Into Afvigelser ( Overskrift, OprettelsesDato, OprettelsesInitialer, VedrAfdelingsid ) Values ( @Overskrift, @OprettelsesDato, @OprettelsesInitialer, @VedrAfdelingsid );"
                SqlCmd = New OleDbCommand(SqlInsert, Conn)
                SqlCmd.Parameters.AddWithValue("@Overskrift", objdata.Overskrift)
                SqlCmd.Parameters.AddWithValue("OprettelsesDato", objdata.OprettelsesDato)
                SqlCmd.Parameters.AddWithValue("@OprettelsesInitialer", objdata.OprettelsesInitialer)
                SqlCmd.Parameters.AddWithValue("@VedrAfdelingsid", objdata.VedrAfdelingsid)
                SqlCmd.ExecuteNonQuery()
                Dim cmd As New OleDbCommand("SELECT @@IDENTITY", Conn)
                Dim lastId As Integer
                lastId = cmd.ExecuteScalar

                'Indsætter handlinger i Afvigelseshandlings-tabellen
                Dim i As Integer

                i = objdata.HandlingsArraylist.Count

                If i > 0 Then
                    For i = 1 To i
                        SqlInsert = "Insert Into Afvigelseshandlinger ( Afvigelsesrapport, Handlingsnr, Handling) Values ( @Afvigelsesrapport, @Handlingsnr, @Handling);"
                        SqlCmd = New OleDbCommand(SqlInsert, Conn)
                        SqlCmd.Parameters.AddWithValue("@Afvigelsesrapport", lastId)
                        SqlCmd.Parameters.AddWithValue("@Handlingsnr", i)
                        SqlCmd.Parameters.AddWithValue("@Handling", objdata.HandlingsArraylist.Item(i))
                        SqlCmd.ExecuteNonQuery()
                    Next i
                End If
                Conn.Close()
                Conn = Nothing
                Return lastId

            End Function
Avatar billede erikjacobsen Ekspert
07. juni 2006 - 00:10 #1
Hvor kalder du CreateAfvigelse? Det er jo deromkring at din objdata.HandlingsArraylist ikke bliver new'et
Avatar billede Slettet bruger
07. juni 2006 - 00:19 #2
Jeg har delt det i (eller forsøgt på)  3 lag. CreatAfvigelse bliver kaldt i BLL. Det ser ud som følger:

            Public Function CreateAfvigelse(ByVal tav As AfvigelseTransferData) As Integer
                'Her kan der laves noget kontrol af data....
                Dim id As Integer
                Dim objData As New Afvigelse()
                Dim objDal As IAfvigelse = New AfvigelserDB
                objData.Overskrift = tav.Overskrift
                objData.OprettelsesDato = tav.OprettelsesDato
                objData.OprettelsesInitialer = tav.OprettelsesInitialer
                objData.VedrAfdelingsid = tav.VedrAfdelingsid
                objData.HandlingsArraylist = tav.HandlingsArraylist

                id = objDal.CreateAfvigelse(objData)
                Return id
            End Function

Som bliver kaldt fra min codebehind:

Protected Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim am As New AfvigelseManager
        Dim id As Integer

        'Danner HandlingsArrylist
        Dim i As Integer
        i = Session("AntalHandlinger")
        Dim HandlingsArraylist As New ArrayList

        For i = 1 To i
            Dim Handling As String
            Handling = "test" + i.ToString
            HandlingsArraylist.Add(Handling)
        Next

        id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text, DagsDato_txt.Text, PersonaleDDL.SelectedValue, AfdelingsNrDDL.SelectedValue, HandlingsArraylist))
Avatar billede erikjacobsen Ekspert
07. juni 2006 - 00:27 #3
Ser jo godt nok ud, men et eller andet sted går det jo galt. Har du glemt en tilordning i constructoren til AfvigelseTransferData ?
Avatar billede Slettet bruger
07. juni 2006 - 09:09 #4
Hej

Jeg skrev det hele om, men jeg fandt ikke ud af hvad der var galt. Men hvis du sender et svar, skal jeg kvittere for din hjælp.
Avatar billede erikjacobsen Ekspert
07. juni 2006 - 12:57 #5
Jeg samler slet ikke på point, tak.
Avatar billede Slettet bruger
19. juni 2006 - 09:18 #6
OK. Tak.
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