Oracle Procedure aufrufen

  • VB.NET

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

    Oracle Procedure aufrufen

    Hallo Wissende!

    Ich möchte eine Prozedur aus VB.NET in einer Oracle DB aufrufen. Alle Felder sind char

    VB.NET-Quellcode

    1. conodbc.ConnectionString = "DSN=;UID=;PWD="
    2. cmdodbc.CommandText = "EXECUTE podar2gfe_pkg.write_gps_info ('S82', '15.10.2012 12:00:0', '47942930', '188753032', '0', '0')"
    3. conodbc.Open()
    4. cmdodbc.ExecuteReader()
    5. Reader.Close()
    6. conodbc.Close()


    Alternativ folgendes:

    VB.NET-Quellcode

    1. conodbc.ConnectionString = "DSN=;UID=;PWD="
    2. cmdodbc.CommandType = CommandType.StoredProcedure
    3. cmdodbc.CommandText = "podar2gfe_pkg.write_gps_info"
    4. cmdodbc.Connection = conodbc
    5. cmdodbc.Parameters.Add(New odbcParameter("@p_radio_code", odbcType.Char))
    6. cmdodbc.Parameters.Add(New odbcParameter("@p_date_time", odbcType.Char))
    7. cmdodbc.Parameters.Add(New odbcParameter("@p_geo_east", odbcType.Char))
    8. cmdodbc.Parameters.Add(New OdbcParameter("@p_geo_north", OdbcType.Char))
    9. cmdodbc.Parameters.Add(New odbcParameter("@p_speed", odbcType.Char))
    10. cmdodbc.Parameters.Add(New odbcParameter("@p_direction", odbcType.Char))
    11. cmdodbc.Parameters("@p_radio_code").Value = "57"
    12. cmdodbc.Parameters("@p_date_time").Value = "15.10.2012 12:00:00'"
    13. cmdodbc.Parameters("@p_geo_east").Value = "47942930"
    14. cmdodbc.Parameters("@p_geo_north").Value = "188753032"
    15. cmdodbc.Parameters("@p_speed").Value = "0"
    16. cmdodbc.Parameters("@p_direction").Value = "0"
    17. conodbc.Open()
    18. cmdodbc.ExecuteReader()
    19. Reader.Close()
    20. conodbc.Close()


    Versuche ich Prozedur über SQL+ aufzurufen funzt es prima. In VB.net bekomme ich eine fiese Fehlermeldung:


    ERROR [HY000] [Oracle][ODBC][Ora]ORA-00604: Fehler auf rekursiver SQL-Ebene 1
    ORA-06502: PL/SQL: numerischer oder Wertefehler
    ORA-06512: in Zeile 14
    ORA-00604: Fehler auf rekursiver SQL-Ebene 1
    ORA-12899: Wert zu groß für Spalte "O"."USER_CURRENT_PROGRAMS"."PROGRAM" (aktuell: 31, maximal: 30)
    ORA-06512: in "O.USER_UTL", Zeile 69
    ORA-06512: in Zeile 3
    ERROR [IM006] [Microsoft][ODBC Driver Manager] Fehler bei SQLSetConnectAttr-Aufruf für Treiber
    ERROR [HY000] [Oracle][ODBC][Ora]ORA-00604: Fehler auf rekursiver SQL-Ebene 1
    ORA-06502: PL/SQL: numerischer oder Wertefehler
    ORA-06512: in Zeile 14

    Danke
    Ich habe mal ein wenig aufgeräumt...ein Fehler allerdings bleibt.

    VB.NET-Quellcode

    1. Dim conodbc As New OdbcConnection
    2. Dim cmdodbc As New OdbcCommand
    3. Dim reader As OdbcDataReader
    4. conodbc.ConnectionString = "DSN=;UID=;PWD="
    5. cmdodbc.Connection = conodbc
    6. cmdodbc.CommandText = "EXECUTE podar2gfe_pkg.write_gps_info('S82', '15.10.2012 13:00:00', '47942930', '188753032', '0', '0')"
    7. Try
    8. conodbc.Open()
    9. reader = cmdodbc.ExecuteReader()
    10. reader.Close()
    11. conodbc.Close()



    Syntax error or access violation.

    Wie bereits erwähnt bekomme ich den Aufruf in SQL+ fehlerfrei bearbeitet.
    Es war gar nicht schlimm. Der CommandTextString war einfach falsch. Für Oracle brauche ich folgendes

    VB.NET-Quellcode

    1. cmd.CommandText = "{CALL podar2gfe_pkg.write_gps_info(?,?,?,?,?,?)}"



    Habe ich leider unter VB nicht ergooglen können, unter C# wurde ich fündig. Trotzdem Danke.