1
CREATE OR REPLACE
FUNCTION xxpos.IS_USER_VALID(
  user_name     IN VARCHAR,
  user_password IN VARCHAR)
RETURN boolean
AS
user_count INTEGER;
BEGIN
    SELECT COUNT(*)
    INTO user_count
    FROM xxpos.service_users
    WHERE user_id     = user_name
    AND user_password = user_password;
    IF user_count     >0 THEN
        return true;
    ELSE
       return false;
    END IF;
END;

我创建了 oracle 函数。我尝试在 C# 我的应用程序中使用它 喜欢:

        Oracle.DataAccess.Client.OracleParameter[] parameters = new Oracle.DataAccess.Client.OracleParameter[3];
        parameters[0] = new Oracle.DataAccess.Client.OracleParameter("user_name", this.UserName);
        parameters[1] = new Oracle.DataAccess.Client.OracleParameter("user_password", this.Password);
        parameters[2] = new Oracle.DataAccess.Client.OracleParameter("is_valid", 
            Oracle.DataAccess.Client.OracleDbType.Object, 
            System.Data.ParameterDirection.ReturnValue);
        using (MyOracleClient myOracleClient = new MyOracleClient())
        {
            myOracleClient.MyExicuteNonQuery(Command.IsUserValid, parameters);
            this.userValid = (bool)parameters[2].Value;
        }

但这行不通。Cloud you please enplane me,在 c# 数据库连接中使用参数的正确方法。

4

2 回答 2

4

来自Oracle 文档

当按位置(默认)绑定到函数时,ODP.NET 期望在任何其他参数之前首先绑定返回值。

挑剔,我知道。

于 2013-06-10T13:59:22.953 回答
0

尝试这个:

this.userValid = ( (Oracle.DataAccess.Types.OracleBoolean)  parameters[2].Value).IsTrue;
于 2017-10-13T16:05:05.297 回答