ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Die "@ID" Skalarvariable muss deklariert werden

Letzter Beitrag 10-14-2009, 11:29 von Aaky. 2 Antworten.
Beiträge sortieren: Zurück Weiter
  •  06-18-2008, 13:35 197838

    Die "@ID" Skalarvariable muss deklariert werden

    Hallo zusammen, habe folgenden code und erhalta dabei beim Ausführen des SQL Befehls die Fehlermeldung: Die "@ID"-Skalarvariable muss deklariert werden.

    Weiss jemand woran das liegen könnte. Habe schon einen Tag lang das INet durchforstet, aber nichts brauchbares gefunden.

    Hier mein Code:

     



    <%
    Dim connectionString
    connectionString = "Provider=sqloledb;Data Source=xxxxxxx;Initial Catalog=xxxxxx;User Id=xxxxx;Password=xxxxxx;Current Language=german;Network Library=dbmssocn;Connection Timeout=5"
    Dim connection
    Set connection = Server.CreateObject("ADODB.Connection")
    connection.connectionString = connectionString
    connection.open()

    Dim SqlCommand
    Dim myID
    myID = "LL"
    SqlCommand = "SELECT * FROM [STUS] WHERE [stuskz]= @ID"

    '//THE LONG WAY:

    Dim adVarChar
    adVarChar= 200
    Dim adParamInput
    adParamInput = 1

    Dim command
    Set command = Server.CreateObject("ADODB.Command")
    command.activeConnection = connection
    command.commandText = SqlCommand
    command.commandType = 1
    command.parameters.append(command.createParameter("@ID", adVarChar, adParamInput, 10, myID))
    'command.parameters.append(command.createParameter("", adVarChar, adParamInput, 255, "Alfreds Futterkiste"))
    Dim rs
    rs = command.execute()

    '//THE SHORT WAY (parameters are passed as an array to the execute method)

    'var command2 = Server.CreateObject("ADODB.Command")
    'command2.activeConnection = connection
    'command2.commandText = SqlCommand
    'var rs2 = command2.execute(null, ["ALFKI", "Alfreds Futterkiste"])

    if not RS.EOF then
     Response.write("True")
    else
     Response.write("False")
    end if
    %>

  •  06-19-2008, 12:03 197896 Antwort zu 197838

    AW: Die "@ID" Skalarvariable muss deklariert werden

    Moin!

    Dein SQLCommand wird direkt an den SQL-Server übergeben und soll dort ausgeführt werden. Für den ist aber diese Variable nicht deklariert. Und da hat er Recht.

    Du möchtest ja, daß zur Laufzeit der Parameterwert als Kriterium verwendet wird. Ersetze im SQLCommand das @ID durch ein schlichtes ?. Der Provider kennt keine benannnten Parameter und ersetzt die Werte immer in der Reihenfolge, wie die Parameter erstellt werden. Deshalb kannst Du auch mehrere ? angeben.

    Die (bessere) Alternative wäre, die ganze Aktion in eine SP zu packen und die dann auszuführen. Dann wäre @ID als benannter Eingabeparameter bekannt.

    HTH
    Merlin

     


    Habe den Mut, Dich Deines Verstandes zu bedienen. (Immanuel Kant)
  •  10-14-2009, 11:29 213749 Antwort zu 197896

    AW: Die "@ID" Skalarvariable muss deklariert werden

    Ich muss das Thema nochmal aufgreifen, da ich zur Zeit vor dem gleichen Problem stehe.

    Meine Anwendung lief bisher auf Access - zum Entwickeln ideal, die Datenbankverbindung mit OLE DB. Da läuft auch alles. Jetzt wollte ich die Anwendung auf SQL 2005 (Express) umstellen. Da dachte ich mir, da ich OLE DB verwendet habe und einen entsprechenden Provider auch für SQL 2005 habe, muss ich nichts ändern.

    Der Gedanke war wohl aber ein großer Fehler. Keine meiner Abfragen funktioniert mehr - eben wegen der Parameter. Bei Access werden diese über die cmd.Parameters sauber ersetzt, bei SQL scheinbar nicht (warum auch immer).

    Und mit der Antwort kann ich absolut nichts anfangen, da
    - es unmöglich ist, alle Abfragen in SPs umzuwandeln (dann kann ich die Anwendung auch gleich neu schreiben, da sie komplett auf DB aufsetzt)
    - das Ersetzen mit ? ist unmöglich, da bei einigen Abfragen die Parameter mehrmals verwendet werden ("... Feld1 LIKE @Text OR feld2 LIKE @Text ...") Wenn die ? der Reihenfolge nach abgearbeitet werden, müsste ich jede Abfrage ändern

    Gibt es nicht eine vernünftige Lösung für das Problem?

    Okay, mein Problem enbtsteht unter ASP.NET - Vorschläge also bitte hier:

    http://www.aspnetzone.de/forums/thread/213751.aspx

Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)