Typisierte DataTable per SQL befüllen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Nils_Kr.

    Typisierte DataTable per SQL befüllen

    Ich versuche typisierte Datatables per SQL-DataAdapter zu befüllen. Mit "normalen" Tables funktioniert das auch. DT as DataTable & DT.fill(SqlDataAdapter) funktioniert.
    Bei DT as fehlerDataTable kommt die Meldung "invalid object name 'fehler'". Allerdings weiss ich nicht so recht, was ich mit der Meldung anfangen soll.

    VB.NET-Quellcode

    1. Dim conn = New SqlClient.SqlConnection
    2. conn.ConnectionString = constr
    3. conn.Open()
    4. Dim dte As Date = DateSerial(Today.Year, Today.Month, 1)
    5. Dim sqlc As New SqlCommand("SELECT fehl_id, line_id, fehlcode_id, date FROM fehler WHERE date > @lastDate", conn)
    6. sqlc.Parameters.AddWithValue("@lastDate", dte)
    7. Dim sqlc2 As New SqlCommand("SELECT line_id, aldatum FROM aktivitaet WHERE aldatum > @lastDate", conn)
    8. sqlc2.Parameters.AddWithValue("@lastDate", dte)
    9. Dim sqlerror As SqlDataAdapter = New SqlDataAdapter(sqlc)
    10. Dim sqlprod As SqlDataAdapter = New SqlDataAdapter(sqlc2)
    11. Dim dtError As New DS_LF32.fehlerDataTable
    12. Dim dtProd As New DS_LF32.aktivitaetDataTable
    13. sqlerror.Fill(dtError)
    14. sqlprod.Fill(dtProd)

    Bilder
    • dt.JPG

      17,34 kB, 407×154, 71 mal angesehen
    Option strict = on

    If it's stupid and it works it ain't stupid.

    ErfinderDesRades schrieb:

    evtl ist date ein reserviertes Wort.

    Ist es, aber offensichtlich wusste das der Ersteller der DB nicht. Im Qellcode kann man sich mit _date behelfen. Meiner Meinung nach ist das aber nicht die Ursache für die Fehlermeldung.

    ErfinderDesRades schrieb:


    warum verwendest du eiglich kein typisiertes Dataset?

    Macht doch eigentlich keinen großen Unterschied, ob ich ein typisiertes DataSet mit 2 Tables oder zwei typisierte DataTables habe. Ich brauche ja trotzdem 2 SQL-Befehle um die Daten von der DB zu bekommen.
    Die Daten werden nur temporär genutzt, da sie direkt im Anschluss in Objekte umgewandelt werden.

    VB.NET-Quellcode

    1. Dim adp2 = New DatasetAdapter(SqlClient.SqlClientFactory.Instance, constr, _
    2. Data.ConflictOption.OverwriteChanges)
    3. MyDataSet.Adapter(adp2).Register(Me).Fill()

    Benutze ich an anderer Stelle, macht in diesem Zusammenhang aber nur wenig Sinn, weil ich nur einen kleinen Bruchteil der DB nutze.

    ErfinderDesRades schrieb:


    warum verwendest du olle vb6-Gurken wie DateSerial()?

    Ist nur temporär, da später das Anfangsdatum von anderer Stelle kommt.
    Option strict = on

    If it's stupid and it works it ain't stupid.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nils_Kr“ ()

    Nils_Kr schrieb:

    Meiner Meinung nach ist das aber nicht die Ursache für die Fehlermeldung.
    soso - deine Meinung.
    also in Access muss man reservierte Worte quoten, wenn man sie in Abfragen als ObjektNamen verwenden will - muss man das in Transact-Sql nicht?
    google dochma "Transact-Sql reserved words"
    Hab den Fehler gefunden. War der falsche connection string und ich bin auf der falschen DB gelandet :whistling: .

    Den gefixt und jetzt werden sowohl typsierte, als auch nicht typisierte tables befüllt. Funktioniert auch trotz des sehr unglücklich benannten "date". Wenn ich mich richtig errinnere, kann man aber innerhalb des SQL-Befehls die Attribute umbenennen. Die DB kann ich leider nicht anpassen.
    Option strict = on

    If it's stupid and it works it ain't stupid.