ich habe eine gespeicherte Prozedur
ALTER PROC TESTLOGIN
@UserName varchar(50),
@password varchar(50)
As
Begin
declare @return int;
set @return = (SELECT COUNT(*)
FROM CPUser
WHERE UserName = @UserName
AND Password = @password);
return @return;
End
und in c #
SqlConnection con = db.con;
SqlCommand cmd = new SqlCommand("TESTLOGIN", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parm = new SqlParameter("@return", SqlDbType.Int);
parm.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(parm);
cmd.Parameters.Add(new SqlParameter("@UserName", txtUserName.Text.ToString().Trim()));
cmd.Parameters.Add(new SqlParameter("@password", txtPassword.Text.ToString().Trim()));
cmd.ExecuteNonQuery();
con.Close();
int id = Convert.ToInt32(parm.Value);
aber immer 0 zurück. Bitte helfen Sie mir, dieses Problem zu lösen
Sie benötigen einen Parameter, für den Direction im Code auf ParameterDirection.ReturnValue
gesetzt ist, aber Sie müssen keinen zusätzlichen Parameter in SP hinzufügen. Versuche dies
SqlParameter returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int id = (int) returnParameter.Value;
2 Dinge.
Die Abfrage muss auf dem SQL-Server abgeschlossen werden, bevor der Rückgabewert gesendet wird.
Die Ergebnisse müssen erfasst und dann beendet werden, bevor der Rückgabewert an das Objekt gelangt.
Beenden Sie auf Englisch die Arbeit und rufen Sie den Wert ab.
das wird nicht funktionieren:
cmm.ExecuteReader();
int i = (int) cmm.Parameters["@RETURN_VALUE"].Value;
Das wird funktionieren:
SqlDataReader reader = cmm.ExecuteReader();
reader.Close();
foreach (SqlParameter prm in cmd.Parameters)
{
Debug.WriteLine("");
Debug.WriteLine("Name " + prm.ParameterName);
Debug.WriteLine("Type " + prm.SqlDbType.ToString());
Debug.WriteLine("Size " + prm.Size.ToString());
Debug.WriteLine("Direction " + prm.Direction.ToString());
Debug.WriteLine("Value " + prm.Value);
}
wenn Sie sich nicht sicher sind, überprüfen Sie den Wert des Parameters vor und während und nachdem die Ergebnisse vom Leser verarbeitet wurden.
sie können dies versuchen. Fügen Sie den Parameter als Ausgaberichtung hinzu und erhalten Sie nach Ausführung der Abfrage den Ausgabeparameterwert.
SqlParameter parmOUT = new SqlParameter("@return", SqlDbType.Int);
parmOUT.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parmOUT);
cmd.ExecuteNonQuery();
int returnVALUE = (int)cmd.Parameters["@return"].Value;
Prozedur gibt niemals einen Wert zurück. Sie müssen einen Ausgabeparameter in der Speicherprozedur verwenden.
ALTER PROC TESTLOGIN
@UserName varchar(50),
@password varchar(50)
@retvalue int output
as
Begin
declare @return int
set @return = (Select COUNT(*)
FROM CPUser
WHERE UserName = @UserName AND Password = @password)
set @[email protected]
End
Dann müssen Sie einen sql-Parameter aus c # hinzufügen, dessen Parameterrichtung out ..__ ist. Hoffe das macht Sinn.