c# - 为什么我的 C# 代码没有从我的 Oracle 函数中获得返回值?

标签 c# oracle function stored-procedures

我正在尝试检查用户是否在我的数据库中,我函数的返回值是“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/

相关文章:

c# - ImageResizer/System.Drawing 和 CMYK JPEG

c# - 轮询数千个 TCP 套接字

java - 如何在 Java 中实现 Oracle 用户定义的聚合函数

regex - oracle中提取括号外的数据

Python 在不重新输入函数参数的情况下覆盖函数/方法

c# - 显示重复项的组合框

c# - 一旦变量被设置为特定值就返回它。平等重载

oracle - 未发生变异表异常

Javascript:使用 .sort 和比较函数来查找数组中最长的单词

javascript - 不是 googlemaps api javascript 中的函数错误