volker: stored procedure call mit asp

hallo zusammen,

ich stehe vor dem problem aus einer asp-seite eine stored procedure einer mssql-datenbank ausführen zu müssen. ich hab noch nie was mit asp gemacht, fische also etwas planlos in der gegend rum...

anyway, hier ist die deklaration der parameter in der stored procedure:
------------------------------------------
CREATE PROC hvs_zellcodierung
       @L_STRASSE       varchar(50)
      ,@L_PLZ           varchar(6)
      ,@L_ORT           varchar(30)
      ,@L_HSNR          varchar(5)
      ,@L_DEPOT         varchar(5)   output
      ,@L_DEPOTNAME     varchar(20)  output
      ,@L_TEZE          varchar(4)   output
      ,@L_FCODE         varchar(2)   output
      ,@L_VZEIT         int          output
-------------------------------------------
es gibt also vier input- und fünf output-parameter. oder einfacher gesagt, die prozedur erwartet strasse, plz, ort und hausnummer als eingabe und liefert dafür depot, depotname, teze, fcode und vzeit zurück.

hier ist die belegung der parameter in der asp-seite:
-----------------------------------------------------
...

cmd.Parameters.Append cmd.CreateParameter("@L_DEPOT", adVarChar,  adParamReturnValue, 5, "")
   cmd.Parameters.Append cmd.CreateParameter("@L_DEPOTNAME", adVarChar,  adParamReturnValue, 20, "")
   cmd.Parameters.Append cmd.CreateParameter("@L_TEZE", adVarChar,  adParamReturnValue, 4, "")
   cmd.Parameters.Append cmd.CreateParameter("@L_FCODE", adVarChar,  adParamReturnValue, 2, "")
   cmd.Parameters.Append cmd.CreateParameter("@L_VZEIT", adInteger,  adParamReturnValue, 1, 1)

cmd.Parameters.Append cmd.CreateParameter("@L_STRASSE", adVarChar, adParamInput, 50, "rilkestrasse")
   cmd.Parameters.Append cmd.CreateParameter("@L_PLZ", adVarChar, adParamInput, 6, "73728")
   cmd.Parameters.Append cmd.CreateParameter("@L_ORT", adVarChar, adParamInput, 30, "Esslingen")
   cmd.Parameters.Append cmd.CreateParameter("@L_HSNR", adVarChar, adParamInput, 5, "2")

cmd.Execute
...
-------------------------------------------------------------------
(die direkte zuweisung von werten dient erstmal zum testen)

ich erhalte folgende fehlermeldung:
-------------------------------------------------------------------
Microsoft OLE DB Provider for ODBC Drivers Fehler "80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Der formale @L_STRASSE-Parameter wurde als OUTPUT definiert, der tatsächliche Parameter jedoch nicht als OUTPUT deklariert.

/test3.asp, line 27
--------------------------------------------------------------------

ich verstehs nicht. wo bitte wird @L_STRASSE als output-parameter deklariert??? ausserdem: wenn ich die prozedur von hand auf der shell ausführe gibts keine probleme.
kann von euch jemand damit was anfangen?

gruss aus berlin, volker

  1. Hi,

    jeder hat mal angefangen :-)

    Eine T-SQL SP hat _IMMER_ _NUR_ _EINEN_ ReturnValue. Du hast die ParameterDirection mit adParamReturnValue  angegeben. Da sollte adParamOutput stehen.

    ... ich verstehs nicht. wo bitte wird @L_STRASSE als output-parameter deklariert???

    evt. hier:  (wenn's da auch drin stehen würde)

    Sicher dass du die Bereiche copy&past so eingeführt hast, wie sie auch _ausgeführt_ werden? Nicht dass da der Hund im Verborgenem liegt.

    ,@L_DEPOT         varchar(5)   output
          ,@L_DEPOTNAME     varchar(20)  output
          ,@L_TEZE          varchar(4)   output
          ,@L_FCODE         varchar(2)   output
          ,@L_VZEIT         int          output

    Das ist auch richtig so für die Definition der SP, weil sonst kommst du an die Daten ja nicht wieder ran. Allerdings war dein ADO Code falsch (falsche Parameter-Richtungsangabe).

    HTH, Ciao, Frank

    1. hi frank,

      leider ändert sich nichts wenn ich die rückgabewerte als adParamOutput definiere.

      Sicher dass du die Bereiche copy&past so eingeführt hast, wie sie auch _ausgeführt_ werden?

      ja, ganz sicher. wenn du lust hast kann ich gerne auch mal den gesamten stored procedure- und asp-code posten.

      hast du evtl. noch ein andere idee?

      gruss aus berlin, volker

  2. hallo,

    ich verstehs nicht. wo bitte wird @L_STRASSE als output-parameter deklariert??? ausserdem: wenn ich die prozedur von hand auf der shell ausführe gibts keine probleme.

    Die Parameter auf der ASP Seite muessen in exakt der gleichen Reihenfolge stehen wie in der StoredProc.
    Die Namen der Parameter sind hierbei unerheblich, MSSQL kriegt als erstes einen ReturnValue (@L_Depot) geliefert, versucht das fuer @L_Strasse in der Stored Proc zu verwenden, und wirft dann natuerlich einen Fehler aus.

    Gruss,
    Melanie

    1. hi melanie,

      Die Parameter auf der ASP Seite muessen in exakt der gleichen Reihenfolge stehen wie in der StoredProc.

      argh!!! da hätte ich selbst drauf kommen können. du hast mir den tag gerettet, 1000 dank dafür!

      gruss aus berlin, volker