Mehrere Rückgabewerte einer DB abfrage erhalten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von M-Jay.

    Mehrere Rückgabewerte einer DB abfrage erhalten

    Moin,
    ich habe ein Problem:
    Undzwar führe ich eine DB Suche durch die mir mehrere Artikel in eine Klasse füllt , diese Hauptartikel können jeweils keine oder auch mehrere (nach oben hin unbegrenzt) AbrechnungsArtikel haben , diese wiederum möchte ich in einer zweiten Abfrage an die DB auslesen, wenn ich die Abfrage manuell ausführe werden mir auch die richtigen ergebnisse ausgegeben , in meiner Application nicht, mittlerweile habe ich auch herausgefunden woran es liegt , allerdings weiß ich nicht wie ich es beheben soll.
    Undzwar durchlaufe ich zwar wie gewollt für jeden Artikel einmal die DB abfrage , allerdings bekomme ich immer nur das erste ergebnis zurück, was natürlich nicht das gewünschte Ergebnis ist wenn der Artikel z.B. 3 Abrechnungsartikel hat ( das weiß ich vorher aber noch nicht).
    Also der langen rede kurzer Sinn: Wie bekomme ich zb alle 3 Abrechnungsergebnisse augegeben um sie in meine Klasse zu schreiben?
    Vielen dank schon mal



    VB.NET-Quellcode

    1. For Each ar As ArtikelListen In ArtikelArray
    2. sqlstring = "SELECT a.intartikelnr, wgranr2=right('0000'+ltrim(rtrim(a.warengruppenr)),5)+right('000'+ltrim(rtrim(a.artikelnr)),4)," _
    3. + "a.KurzBez, a.himi_nr, a.Bez1, a.Bez2, a.Bez3," _
    4. + "m.mwstsatz, mengeneinheit= isnull(h.bez,h.Mengeneinheitid)," _
    5. + "wgranr=ltrim(rtrim(a.warengruppenr))+'/'+ltrim(rtrim(a.artikelnr))," _
    6. + "lieferantenkurzname=L.kurzname," _
    7. + "a.PharmaZentralNummer," _
    8. + "a.EAN, a.SaniZentralNummer," _
    9. + "a.LfArtikelNr, a.alternnr," _
    10. + "a.Eigenschaft1," _
    11. + "a.Eigenschaft2," _
    12. + "a.Eigenschaft3," _
    13. + "Eigenschaft4=a.Modell, a.Lagerkorrektur FROM Artikel a, Mengeneinheit h, mwstsatz m, lieferant L , ArtikelAbrechPos p WHERE h.Mengeneinheitid=*a.Mengeneinheitid AND " _
    14. + "m.mwst_vh0=a.mwst_vh0 AND a.lieferantnr*=L.lieferantnr " _
    15. + "AND isnull(a.archiv,'0')='0' and a.verkaufskennzeichen='F' " _
    16. + "AND a.intartikelnr = p.IntArtikelNrAbrech AND p.IntArtikelNr = " + ar.intArtikelNr
    17. cmd.Parameters.Clear()
    18. cmd.CommandText = sqlstring
    19. cmd.CommandType = CommandType.Text
    20. Try
    21. reader = cmd.ExecuteReader(CommandBehavior.SingleRow)
    22. Do While reader.Read()
    23. If reader.HasRows Then
    24. ar.hatAbrechPos = True
    25. abrechnungsArtikel.intArtikelNr = ar.intArtikelNr
    26. If Not IsDBNull(reader("intartikelnr")) Then
    27. abrechnungsArtikel.AbrintArtikelNr = reader("intartikelnr").ToString
    28. End If
    29. If Not IsDBNull(reader("KurzBez")) Then
    30. abrechnungsArtikel.AbrKurzBez = reader("KurzBez").ToString
    31. End If
    32. If Not IsDBNull(reader("wgranr")) Then
    33. abrechnungsArtikel.AbrWGRANR = reader("wgranr").ToString
    34. End If
    35. If Not IsDBNull(reader("Bez1")) Then
    36. abrechnungsArtikel.AbrBez1 = reader("Bez1").ToString
    37. End If
    38. If Not IsDBNull(reader("Bez2")) Then
    39. abrechnungsArtikel.AbrBez2 = reader("Bez2").ToString
    40. End If
    41. If Not IsDBNull(reader("Bez3")) Then
    42. abrechnungsArtikel.AbrBez3 = reader("Bez3").ToString
    43. End If
    44. If Not IsDBNull(reader("Eigenschaft1")) Then
    45. abrechnungsArtikel.AbrEig1 = reader("Eigenschaft1").ToString
    46. End If
    47. If Not IsDBNull(reader("Eigenschaft2")) Then
    48. abrechnungsArtikel.AbrEig2 = reader("Eigenschaft2").ToString
    49. End If
    50. If Not IsDBNull(reader("Eigenschaft3")) Then
    51. abrechnungsArtikel.AbrEig3 = reader("Eigenschaft3").ToString
    52. End If
    53. If Not IsDBNull(reader("himi_nr")) Then
    54. abrechnungsArtikel.Abrhimi = reader("himi_nr").ToString
    55. End If
    56. If Not IsDBNull(reader("lieferantenkurzname")) Then
    57. abrechnungsArtikel.AbrLieferant = reader("lieferantenkurzname").ToString
    58. End If
    59. If Not IsDBNull(reader("LfArtikelNr")) Then
    60. abrechnungsArtikel.AbrLfArtikelNr = reader("LfArtikelNr").ToString
    61. End If
    62. If Not IsDBNull(reader("PharmaZentralNummer")) Then
    63. abrechnungsArtikel.Abrpzn = reader("PharmaZentralNummer").ToString
    64. End If
    65. If Not IsDBNull(reader("EAN")) Then
    66. abrechnungsArtikel.Abrean = reader("EAN").ToString
    67. End If
    68. If Not IsDBNull(reader("SaniZentralNummer")) Then
    69. abrechnungsArtikel.Abrszn = reader("SaniZentralNummer").ToString
    70. End If
    71. If Not IsDBNull(reader("alternnr")) Then
    72. abrechnungsArtikel.Abralternnr = reader("alternnr").ToString
    73. End If
    74. If Not IsDBNull(reader("mengeneinheit")) Then
    75. abrechnungsArtikel.Abrmengeneinheit = reader("mengeneinheit").ToString
    76. End If
    77. If Not IsDBNull(reader("Lagerkorrektur")) Then
    78. If reader("Lagerkorrektur").ToString = "1" Then
    79. abrechnungsArtikel.AbrLagerkorrektur = True
    80. Else
    81. abrechnungsArtikel.AbrLagerkorrektur = False
    82. End If
    83. End If
    84. vd.schreibeUndPrintMeldung(abrechnungsArtikel.intArtikelNr + "' abrechnungsIntartikelNr='" + abrechnungsArtikel.AbrintArtikelNr + "'" + vbCrLf)
    85. vd.schreibeUndPrintMeldung("gsqlstring='" + sqlstring + "'" + vbCrLf)
    86. AbrechnungsListe.Add(abrechnungsArtikel)
    87. End If
    88. loop
    89. reader.Close()
    90. Catch ex As Exception
    91. Response.Write(ex.ToString + "<br/>")
    92. vd.schreibeUndPrintMeldung("gsqlstring='" + sqlstring + "'" + vbCrLf)
    93. vd.schreibeUndPrintMeldung(ex.ToString + vbCrLf)
    94. End Try
    95. If Not reader Is Nothing Then
    96. reader.Close()
    97. End If
    98. Next



    Die vd.schreibeUndPrintMeldung könnt ihr übrigens Ignorieren , das sind nur meine Debugger ;)

    ctextrem schrieb:

    Nimm dafür ein typ. Dataset. da kannst du dann auch im Designer alle Commands eingeben und im Programm musst du es nur noch über eine Codezeile daraufzugreifen.


    Vielen Dank erstmal, mir ist mein Fehler allerdings aufgefallen, ich hätte statt
    reader = cmd.ExecuteReader(CommandBehavior.SingleRow)
    folgendes nehmen sollen reader = cmd.ExecuteReader(CommandBehavior.SingleResult)
    das gibt mir das richtige zurück, damit ist das problem gelöst , was mich zu meinem nächsten Problem führt :

    In der schleife gebe ich ja folgendes ein
    abrechnungsArtikel.intArtikelNr = ar.intArtikelNr

    das sorgt leider nicht wie gewollt dafür, dass jeder artikel die intartikelNr des aktuellen Hauptartikels kriegt sondern dafür dass alle die intartikelNr die intartikelNr des letzten Hauptartikels der Schleife kriegen, hat jemand eine Idee woran das liegt? Ich stehe da leider etwas auf dem schlauch ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „M-Jay“ ()

    So bin nun selber auf die Lösung gekommen, hätte in der schleife die abrechnungsArtikel mit
    abrechnungsArtikel=new Abrechnungsartikel initialisieren müssen statt es am anfang der seite zu tun, dennoch vielen dank an alle die sich mit meiner Frage beschäftigt haben