【发布时间】:2014-08-07 12:02:40
【问题描述】:
我正在尝试检查用户是否在我的数据库中,我的函数返回值是“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;
【问题讨论】:
-
你确定你没有引发任何异常?
-
ParameterDirection.ReturnValue 只能返回数值,不能返回字符串。 (至少在 Sql Server 中)尝试更改您的 proc 以返回一个整数和您的参数集合以接收一个整数。
-
尝试更改将“return_value”参数添加到
cmd.Parameters.Add("return_value", OracleType.VarChar2, 1).Direction = ParameterDirection.ReturnValue;的语句。在这种情况下,Add的第三个参数应该是列的大小 - 在这种情况下,您只返回一个字符,所以它应该是 1。ParameterDirection 是参数的一个属性。分享和享受。
标签: c# oracle function stored-procedures