Tableadapter mit Scalar Funktion vom MSSQL-Server

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von rrobbyy.

    Tableadapter mit Scalar Funktion vom MSSQL-Server

    Hallo zusammen,

    ich habe auf einem 2016er MSSQL-Server eine Scalar-Funktion namens GetCounter mit einem Parameter. In SQL läuft alles.

    Im VB-Projekt habe ich ein typed Dataset und diese Funktion vom SQL-Server zum Tableadpater hinzugefügt. Der notwendige Parameter wurde auch wie erwartet durch den Designer erkannt. Eine Datenvorschau im Designer funktioniert ebenfalls.

    Wenn ich jetzt diese SQL-Funktion über den Tableadapter ausführe, bekomme ich aber 0 zurück (klar integer ist ohne init immer 0).

    Quellcode

    1. Dim ta As New dsTableAdapters.ZAEHLERTABELLETableAdapter
    2. Dim c As Integer = CType(ta.GetCounter(Tabelle), Integer)



    Wenn ich aber direkt im Tableadapter die Query vom SQL-Server als neue Abfrage namens "ScalarQuery" als Scalar erstelle, bekomme ich die Werte.

    Quellcode

    1. Dim ta As New dsTableAdapters.ZAEHLERTABELLETableAdapter
    2. Dim c As Integer = CType(ta.SclarQuery(Tabelle), Integer)



    Ich meine, läuft ja. Aber ich verstehe den Unterscheid nicht. Die SQL-Funktion muss doch durch die Tableadapter ausgeführt werden? ?(

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „rrobbyy“ ()

    Zunächstmal mussich gestehn: ich kenne dieses Feature garnet - ich hab mit DataAdapters bislang immer nur Tabellen abgerufen.

    Was mich wundert, dass ausgerechnet dieser TableAdapter die Scalar-Function aufrufen können soll, und andere nicht.
    Eine Sql-Stored-Function hat doch mit einer bestimmten Tabelle garnix zu tun.
    Also was die SF intern macht ist doch nach aussen hin völli wumpe.
    Ich habe noch mal recherchiert. Anscheinend wird der TableAdapterCode nicht ganz richtig generiert.
    Bei SQL-ScalarFunctionen kommt immer nur 0.

    stackoverflow.com/questions/24…nction-in-sql-server-2008

    Wenn ich eine StoredProcedure mit dem Code der Function in SQL generiere und diese SP im vb-designer einbinde, kommen die korrekten Werte.

    Kurzum: Scalarfunktionen in MSSQL können nicht in vb.net verarbeitet werden. c# soll wohl funktionieren

    Workarounds:
    - die Function direkt im Tableadapter
    - Function in SQL als StoredProcedure
    - den Code des TableAdapter wie im Link anpassen

    Damit dürfte sich das Thema dann erledigt haben.