Hallo Leute,
ich habe eine SP geschrieben die in Abhängigkeit von zwei übergebenen Werten die Anzahl der Datensätrze ausgeben soll.
CREATE PROCEDURE SP\_Login(@login\_name varchar(10), @login\_pw varchar(10), @Anzahl integer)
SELECT count(\*) AS Anzahl
FROM TW\_login
WHERE login\_name = @login\_name AND login\_pw = @login\_pw
GO
wenn ich die im Querry Analyzer laufen lasse meckert der Server das er keine eingabe des @login_pw bekommt (Nachricht Nr. 201).
Hier der Aufruf der SP den ich zum Testen verwende.
EXECUTE SP\_Login(hdjlange, Napoleon)
Witzig ist aber wenn ich die gleiche SP über ADO.NET aus WebMatrix heraus aufrufe bekomme ich die Fehlermeldung das
Der Formale @Anzahl-Parameter wurde als OUTPUT definiert, der tatsächliche Parameter jedoch nicht als OUTPUT deklariert.
Meine Fragen diesbezüglich sind diese:
Über eure Hilfe würde ich mich sehr freuen, Euer
hdj-lange
Also, die Stored Procedure mit dem Prefix ‚SP_‘ zu versehen ist schon mal keine gute Idee. Denn dieser Prefix wird vom SQL-Server intern benutzt und weist ihn an, erst mal das System-Dictionary zu durchsuchen, wo er deine SP nicht finden wird.
Bin mir über den Syntax nicht ganz sicher, hab hier nichts zur Hand:
CREATE PROCEDURE SP\_Login(
@loginname varchar(10),
@login\_pw varchar(10),
@Anzahl int output)
AS
SELECT count(\*) AS Anzahl
FROM TW\_login
WHERE login\_name = @login\_name AND login\_pw = @login\_pw
@Anzahl = Anzahl
In ADO.NET muss das Parameter-Objekt korrekt initialisiert werden
(C#)
system.data.sqlClient.sqlParam Param = new (...)
Param.Direction = system.data.paramdirection = (...) ReturnValue
Pardon für die Syntax-Lücken; wie gesagt, kein Compiler hier…
Übrigens: Ist es wirklich notwendig auch das Passwort zu übergeben ? Die Benutzer sollten ja eindeutig sein (Security)…
Hallo
vielen Dank für den Tipp, ich war scheinbar schon das was mann allgemein als Betriebsblind bezeichnet.
meine gespeicherte Prozedur sieht nun so aus:
CREATE PROCEDURE Login(
@loginname varchar(10),
@login\_pw varchar(10))
AS
SELECT count(\*) AS Anzahl
FROM TW\_login
WHERE login\_name = @login\_name AND login\_pw = @login\_pw
GO
Übrigens: Ist es wirklich notwendig auch das Passwort zu
übergeben ? Die Benutzer sollten ja eindeutig sein
(Security)…
SI SI es ist nötig, es soll ja eine Loginfunktion sein die gegen eine Datenbank gefahren wird.
Mit freundlichem Gruß
hdj-lange