Tôi đã xác minh rằng phương thức/thủ tục Oracle của tôi đang hoạt động chính xác, nhưng trong C# tôi luôn nhận -1 trả về từ ExecuteNonQuery(). Do đó, bool dưới đây luôn sai. Chúng tôi chỉ sử dụng Trình kích hoạt trong DB (Oracle) của chúng tôi cho các câu lệnh INSERT. Tôi có cần kích hoạt cho bản cập nhật không?ExecuteNonQuery() trả về -1 trong Cập nhật khi hồ sơ được cập nhật
Bất kỳ đề xuất nào tại sao điều đó sẽ xảy ra? Nó chắc chắn cập nhật một bản ghi:
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);
}
Xin lỗi ... heres 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;
END Change_Password;
Hình thức lưu trữ của bạn trông như thế nào? – MikeWyatt