gpt4 book ai didi

c# - 更新记录时,ExecuteNonQuery() 在 Update 中返回 -1

转载 作者:太空狗 更新时间:2023-10-29 22:15:13 27 4
gpt4 key购买 nike

我已经验证我的方法/Oracle 程序工作正常,但在我的 C# 中,我总是从 ExecuteNonQuery() 返回 -1。因此,下面的 bool 总是错误的。我们只在 DB (Oracle) 中使用触发器来执行 INSERT 语句。我需要触发器来更新语句吗?

任何建议为什么会发生?它肯定更新了一个记录:

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);
}

抱歉...这是 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;

最佳答案

尝试显式返回 SQL%ROWCOUNT。

根据 MSDN,DbCommand..ExecuteNonQuery 将始终为存储过程调用返回 -1:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1.

如果我从使用大量存储过程的日子里没记错的话,我相信您需要使用输出参数来返回诸如更新行数之类的东西。

关于c# - 更新记录时,ExecuteNonQuery() 在 Update 中返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2203100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com