Daten in SQL-Express-Tabelle mittels SELECT schreiben klappt nicht!

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von BeSt.

    Daten in SQL-Express-Tabelle mittels SELECT schreiben klappt nicht!

    Hallo.

    Ich verzweifel grad.

    Ich habe eine SQLServerExpress2008-Datenbank.
    Darin habe ich eine Tabelle, die sich "tempview" nennt. In diese Tabelle möchte ich Daten einfügen, die ich aus einer Kombination von anderen Tabellen per SELECT lese. Also quasi so:
    (Der SELECT ist recht unbequem, aber den braucht ihr nicht genauer analysieren... es geht um den INSERT ;) )

    VB.NET-Quellcode

    1. Dim Permission As New System.Data.SqlClient.SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted)
    2. Dim connString = "Data Source=SERVER\NAME;Initial Catalog=DBNAME;User Id=USERNAME;Password=PASSWORD;"
    3. Dim conn As SqlConnection
    4. Dim cmd As New SqlCommand
    5. conn = New SqlConnection(connString)
    6. Try
    7. conn.Open()
    8. Catch ex As SqlException
    9. MsgBox("Error: " & ex.ToString())
    10. cmdClose.PerformClick()
    11. Exit Sub
    12. End Try
    13. cmd.Connection = conn
    14. sqlcmd = "INSERT INTO tempview (ID,MandNr,Mandant,KndNr,Kunde,DokDatum,Ordner,DokName,Kommentar) (" & _
    15. "SELECT object12.id as ID," & _
    16. "stamm1.zahl1 as MandNr," & _
    17. "stamm1.feld1 as Mandant," & _
    18. "register3.zahl1 as KndNr," & _
    19. "register3.feld1 as Kunde," & _
    20. "object12.datum1 as DokDatum," & _
    21. "object12.feld1 as Ordner," & _
    22. "object12.feld2 as DokName," & _
    23. "object12.feld3 as Kommentar " & _
    24. "FROM stamm1,register3,sdrel,object12 " & _
    25. "WHERE stamm1.id=sdrel.stamm_id AND " & _
    26. "register3.id=sdrel.register AND " & _
    27. "stamm1.id = register3.stamm_id AND " & _
    28. "object12.id=sdrel.object_id)"
    29. Dim res As Integer = cmd.ExecuteNonQuery()
    30. MsgBox(res)


    Der Wert in "res" ist dabei dann "-1". Es kommt aber ansonsten keinen Fehler.
    Wenn ich den Inhalt von "sqlcmd" aber nun direkt im SQLExpressManagementStudio absetze, dann funktioniert das ganze ohne Fehler.

    Jetzt also die Frage: Warum kann ich aus VB.NET heraus über ExecuteNonQuery keine "INSERT INTO...SELECT"-Anweisung ausführen?

    Vielen Dank für eure Hilfe.

    Benni
    Machs so:

    VB.NET-Quellcode

    1. Dim Permission As New System.Data.SqlClient.SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted)
    2. Dim connString = "Data Source=SERVER\NAME;Initial Catalog=DBNAME;User Id=USERNAME;Password=PASSWORD;"
    3. Dim conn As SqlConnection
    4. Dim cmd As New SqlCommand
    5. conn = New SqlConnection(connString)
    6. Try
    7. conn.Open()
    8. Catch ex As SqlException
    9. MsgBox("Error: " & ex.ToString())
    10. cmdClose.PerformClick()
    11. Exit Sub
    12. End Try
    13. cmd.Connection = conn
    14. sqlcmd = "INSERT INTO tempview (ID,MandNr,Mandant,KndNr,Kunde,DokDatum,Ordner,DokName,Kommentar) (" & _
    15. "SELECT object12.id as ID," & _
    16. "stamm1.zahl1 as MandNr," & _
    17. "stamm1.feld1 as Mandant," & _
    18. "register3.zahl1 as KndNr," & _
    19. "register3.feld1 as Kunde," & _
    20. "object12.datum1 as DokDatum," & _
    21. "object12.feld1 as Ordner," & _
    22. "object12.feld2 as DokName," & _
    23. "object12.feld3 as Kommentar " & _
    24. "FROM stamm1,register3,sdrel,object12 " & _
    25. "WHERE stamm1.id=sdrel.stamm_id AND " & _
    26. "register3.id=sdrel.register AND " & _
    27. "stamm1.id = register3.stamm_id AND " & _
    28. "object12.id=sdrel.object_id)"
    29. cmd.ExecuteNonQuery()
    30. MsgBox(sqlcmd)


    So sollte es gehen

    Dann änder das:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. sqlcmd = "INSERT INTO tempview (ID,MandNr,Mandant,KndNr,Kunde,DokDatum,Ordner,DokName,Kommentar) (" & _
    2. "SELECT object12.id as ID," & _
    3. "stamm1.zahl1 as MandNr," & _
    4. "stamm1.feld1 as Mandant," & _
    5. "register3.zahl1 as KndNr," & _
    6. "register3.feld1 as Kunde," & _
    7. "object12.datum1 as DokDatum," & _
    8. "object12.feld1 as Ordner," & _
    9. "object12.feld2 as DokName," & _
    10. "object12.feld3 as Kommentar " & _
    11. "FROM stamm1,register3,sdrel,object12 " & _
    12. "WHERE stamm1.id=sdrel.stamm_id AND " & _
    13. "register3.id=sdrel.register AND " & _
    14. "stamm1.id = register3.stamm_id AND " & _
    15. "object12.id=sdrel.object_id)"



    In das:

    VB.NET-Quellcode

    1. cmd.CommandText= "INSERT INTO tempview (ID,MandNr,Mandant,KndNr,Kunde,DokDatum,Ordner,DokName,Kommentar) (" & _
    2. "SELECT object12.id as ID," & _
    3. "stamm1.zahl1 as MandNr," & _
    4. "stamm1.feld1 as Mandant," & _
    5. "register3.zahl1 as KndNr," & _
    6. "register3.feld1 as Kunde," & _
    7. "object12.datum1 as DokDatum," & _
    8. "object12.feld1 as Ordner," & _
    9. "object12.feld2 as DokName," & _
    10. "object12.feld3 as Kommentar " & _
    11. "FROM stamm1,register3,sdrel,object12 " & _
    12. "WHERE stamm1.id=sdrel.stamm_id AND " & _
    13. "register3.id=sdrel.register AND " & _
    14. "stamm1.id = register3.stamm_id AND " & _
    15. "object12.id=sdrel.object_id)"

    Hallo.

    Ist schon toll, wie gut eine Woche Urlaub gegen Überarbeitung hilft...
    Heute morgen bin ich aus dem Urlaub gekommen und habe mich wieder diesem Problem gewidmet. Und was sehen meine ausgeruhten Augen?

    Zwischen

    VB.NET-Quellcode

    1. sqlcmd = "INSERT INTO tempview (...)"

    und

    VB.NET-Quellcode

    1. Dim res As Integer = cmd.ExecuteNonQuery()

    fehlt ganz einfach noch das hier:

    VB.NET-Quellcode

    1. cmd.CommandText = sqlcmd


    Eigentlich ja klar, dass es ohne das nicht gehen kann. Nur schade, dass es auch niemand anders aufgefallen ist :P
    Nichts für ungut und trotzdem danke an alle, die mitgedacht haben und versucht haben zu helfen.

    LG
    Benni

    BeSt schrieb:

    Eigentlich ja klar, dass es ohne das nicht gehen kann. Nur schade, dass es auch niemand anders aufgefallen ist :P
    Nichts für ungut und trotzdem danke an alle, die mitgedacht haben und versucht haben zu helfen.
    Ähm....
    Schau mal genau was Patrick1993 geschrieben hat ;) er hat dir dein Problem gelöst..