我正在尝试检查用户是否在我的数据库中,我函数的返回值是“t”或“f”。如下:
CREATE OR REPLACE FUNCTION LOGIN
(p_Naam in varchar2
,p_Wachtwoord in varchar2)
return varchar2
is
v_count number;
BEGIN
select count(*) into v_count
from Lid
where Naam = p_Naam
and Wachtwoord = p_Wachtwoord;
if v_count > 0 then
return 't';
end if;
return 'f';
END LOGIN;
现在我用我的 C# 代码调用这个函数,如下所示:
public bool LogIn(string gebruikersnaam, string wachtwoord)
{
string s;
var cmd = new OracleCommand
{
Connection = conn,
CommandText = "Login",
CommandType = CommandType.StoredProcedure
};
cmd.Parameters.Add("p_Naam", OracleDbType.Varchar2).Value = gebruikersnaam;
cmd.Parameters.Add("p_Wachtwoord", OracleDbType.Varchar2).Value = wachtwoord;
cmd.Parameters.Add("return_value", OracleDbType.Varchar2, ParameterDirection.ReturnValue);
try
{
conn.Open();
cmd.ExecuteNonQuery();
s = cmd.Parameters["return_value"].Value.ToString();
}
finally
{
conn.Close();
}
return s == "t";
}
当我在我的 oracle 开发人员中尝试这个函数时,我得到了一个输出。 只有在我的 C# 代码中,s 总是以 ""的形式出现
在我的 sql 开发人员中,以下给了我 't'
BEGIN
dbms_output.put_line(LOGIN('Willem Koonings', 'willem'));
END;
最佳答案
我有一段时间没有使用 Oracle Commands,但我建议进行以下更改:
CommandText = "Login(:p_Naam, :p_Wachtwoord)";
我打赌的长解决方案有效(尽管将类型更改为文本):
CommandText = "select Login(:p_Naam, :p_Wachtwoord) return_value from dual";
关于c# - 为什么我的 C# 代码没有从我的 Oracle 函数中获得返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264422/