Avatar billede steensommer Praktikant
07. september 2009 - 13:25 Der er 9 kommentarer og
1 løsning

Udtrække data

Hej Visual Basic .Net

Jeg forsøger vha nedenstående kode at trække alle "[Operations dato] og [Operation type]" udfra "Cpr" og efterfølgende tildele hvert resultat en variabel:

PDato1 for første [Operations dato], P1 for [Operation type] sv. til den dato
PDato2 for den følgende [Operations dato], P2 for [Operation type] sv. til den dato
osv osv

            Dim Connection As New SqlConnection(Conn)
            Connection.Open()
            Dim Command As New SqlCommand("SELECT [Operations dato], [Operation type] FROM Kartotek WHERE [Cpr nr] Like '" & Cpr & "%'", Connection)
            Command.ExecuteNonQuery()


            Connection.Close()
            Connection = Nothing
Avatar billede arne_v Ekspert
07. september 2009 - 16:27 #1
For en SELECT med flere resultater skal du ikke bruge ExecuteNonQuery men ExecuteReader.
Avatar billede arne_v Ekspert
07. september 2009 - 16:29 #2
kode snippet:

        Dim rdr As SqlDataReader = cmd.ExecuteReader
        While rdr.Read
            ' rdr(0) og rdr(1) indeholder her de to kolonner
        End While
Avatar billede steensommer Praktikant
07. september 2009 - 17:10 #3
Det vil sige at man kan gøre som følger (jvf ovenstående):

Dim rdr As SqlDataReader = cmd.ExecuteReader
While rdr.Read
  PDato1 = rdr(0)
  PD1 = rdr (1)
End While

Men hvorledes med de følgende PDato2, P2 etc etc max 10 stk?
Avatar billede arne_v Ekspert
07. september 2009 - 17:39 #4
Ja. Bortset fra at du muligvis skal CType'e dem.

Ved hvert gennemløb af while løkken henter du en række.

Jeg kan næppe tro at du vil gemme dem i enkelte variable.

DU kan gemme dem i array eller collection.
Avatar billede steensommer Praktikant
07. september 2009 - 19:30 #5
Jeg er godt nok på herrens mark :-/
Avatar billede arne_v Ekspert
08. september 2009 - 01:18 #6
Noget a la:

Dim listdato As List(Of DateTime) = New List(Of DateTime)
Dim listtype As List(Of Integer) = New List(Of Integer)
Dim rdr As SqlDataReader = cmd.ExecuteReader
While rdr.Read
  listdato.Add(CType(rdr(0),DateTime))
  listtype.Add(CType(rdr(1),Integer))
End While
rdr.Close
Avatar billede steensommer Praktikant
08. september 2009 - 16:44 #7
...hmm og hvorledes anvendes det i praksis jvf at jeg ønsker at resultaterne skal tilsluttes en variabel PDato 1, P1 etc etc?
Avatar billede steensommer Praktikant
10. september 2009 - 10:14 #8
Hej

Jeg har fået det til at virke ved følgende lidt omstændige metode. Hvis der er forslag til at gøre det lettere/hurtigere/bedre er jeg MEGET lydhør:

            Dim Connection As New SqlConnection(Conn)
            Connection.Open()
            Dim Command As New SqlCommand("SELECT [Operations dato], [Operation type] FROM Kartotek WHERE [Cpr nr] Like '" & Cpr & "%'", Connection)

            Dim PDato1, P1, PDato2, P2, PDato3, P3, PDato4, P4, PDato5, P5, PDato6, P6, PDato7, P7, PDato8, P8, PDato9, P9, PDato10, P10 As String
            Dim X As Long
            X = 0
            Dim listdato As List(Of DateTime) = New List(Of DateTime)
            Dim listtype As List(Of String) = New List(Of String)
            Dim reader As SqlDataReader = Command.ExecuteReader
            While reader.Read
                X = X + 1
                If X = 1 Then
                    If Not reader.IsDBNull(0) Then
                        PDato1 = reader(0)
                    Else
                        PDato1 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P1 = reader(1)
                    Else
                        P1 = ""
                    End If
                ElseIf X = 2 Then
                    If Not reader.IsDBNull(0) Then
                        PDato2 = reader(0)
                    Else
                        PDato2 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P2 = reader(1)
                    Else
                        P2 = ""
                    End If
                ElseIf X = 3 Then
                    If Not reader.IsDBNull(0) Then
                        PDato3 = reader(0)
                    Else
                        PDato3 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P3 = reader(1)
                    Else
                        P3 = ""
                    End If
                ElseIf X = 4 Then
                    If Not reader.IsDBNull(0) Then
                        PDato4 = reader(0)
                    Else
                        PDato4 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P4 = reader(1)
                    Else
                        P4 = ""
                    End If
                ElseIf X = 5 Then
                    If Not reader.IsDBNull(0) Then
                        PDato5 = reader(0)
                    Else
                        PDato5 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P5 = reader(1)
                    Else
                        P5 = ""
                    End If
                ElseIf X = 6 Then
                    If Not reader.IsDBNull(0) Then
                        PDato6 = reader(0)
                    Else
                        PDato6 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P6 = reader(1)
                    Else
                        P6 = ""
                    End If
                ElseIf X = 7 Then
                    If Not reader.IsDBNull(0) Then
                        PDato7 = reader(0)
                    Else
                        PDato7 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P7 = reader(1)
                    Else
                        P7 = ""
                    End If
                ElseIf X = 8 Then
                    If Not reader.IsDBNull(0) Then
                        PDato8 = reader(0)
                    Else
                        PDato8 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P8 = reader(1)
                    Else
                        P8 = ""
                    End If
                ElseIf X = 9 Then
                    If Not reader.IsDBNull(0) Then
                        PDato9 = reader(0)
                    Else
                        PDato9 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P9 = reader(1)
                    Else
                        P9 = ""
                    End If
                ElseIf X = 10 Then
                    If Not reader.IsDBNull(0) Then
                        PDato10 = reader(0)
                    Else
                        PDato10 = ""
                    End If
                    If Not reader.IsDBNull(1) Then
                        P10 = reader(1)
                    Else
                        P10 = ""
                    End If
                End If
            End While
            reader.Close()

            Connection.Close()
            Connection = Nothing
Avatar billede arne_v Ekspert
12. september 2009 - 03:20 #9
Du kunne droppe while løkken og kalde reader.Read i 10 if sætninger.

Men jeg mener stadig at konceptet med 10 variable med et tal suffix er forkert - du bør bruge array eller List og så indexere ind i det når du skal bruge værdierne.
Avatar billede arne_v Ekspert
14. oktober 2009 - 02:28 #10
OK ?
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
Kurser inden for grundlæggende programmering

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