ExecuteNonQuery() retourne -1 dans la mise à Jour lorsque les enregistrements sont mis à jour
J'ai vérifié que ma méthode/procédure Oracle fonctionne correctement, mais dans mon C# j'ai toujours -1 est retourné à partir de la méthode ExecuteNonQuery(). Par conséquent, ci-dessous bool est toujours faux. Nous n'utilisons que des Déclencheurs dans notre DB (Oracle) pour les états d'INSERTION. Ai-je besoin d'un déclencheur pour une instruction de mise à jour?
Des suggestions pourquoi cela se passerait-il? C'est certainement la mise à jour d'un enregistrement:
public bool ChangePassword(long UserId, string NewPassword)
{
int rcds = 0;
using (OracleConnection dbConn = new OracleConnection(dbConnString))
using (OracleCommand dbCmd = new OracleCommand("PKG_USER.CHANGE_PASSWORD", dbConn))
{
try
{
string salt = GenerateSalt();
dbCmd.CommandType = CommandType.StoredProcedure;
dbCmd.Parameters.Add("p_USER_ID", OracleDbType.Int64, UserId, ParameterDirection.Input);
dbCmd.Parameters.Add("P_PASSWORD", OracleDbType.Varchar2, 128, EncodePassword(NewPassword, this.IsPasswordHashed, salt), ParameterDirection.Input);
dbCmd.Parameters.Add("P_PASSWORD_SALT", OracleDbType.Varchar2, 128, salt, ParameterDirection.Input);
if (dbConn.State != ConnectionState.Open) dbConn.Open();
rcds = dbCmd.ExecuteNonQuery();
}
catch (Exception e)
{
LastError = e.Message + " " + e.Source;
rcds = 0;
}
finally
{
dbCmd.Dispose();
dbConn.Dispose();
}
}
return (rcds > 0);
}
Désolé... heres la SP:
PROCEDURE Change_Password(p_User_Id IN Users.User_Id%TYPE,
p_Password IN Users.Password%TYPE,
p_Password_Salt IN Users.Password_Salt%TYPE) IS
BEGIN
UPDATE Users
SET Password = p_Password,
Password_Salt = p_Password_Salt,
Password_Change_Date = SYSDATE
WHERE User_Id = p_User_Id;
FIN Change_Password;
- Quelle est votre procédure stockée ressembler?
Vous devez vous connecter pour publier un commentaire.
Essayez explicitement le retour de SQL%du nombre de lignes.Selon MSDN, DbCommand..ExecuteNonQuery renvoie toujours -1 pour les appels de procédure stockée:
Si je me souviens bien de mes jours à l'aide de beaucoup de stocké procs, je crois que vous devez utiliser un argument de sortie pour le retour des choses comme le nombre de lignes mises à jour.
Je ne suis pas un Oracle gars, mais apparemment il y a une commande:
qui l'empêche de retourner le nombre d'enregistrements affectés. Est cette ligne dans la procédure stockée? Ou avez-vous essayé 'ensemble des commentaires sur"? Fonctionnellement je pense que c'est exactement l'inverse de SQL Server SET NOCOUNT on/OFF commande.