首页 > 解决方案 > 遇到错误:值不在预期范围内

问题描述

我正在访问我的 api C# 初学者的 oracle 数据库,当我尝试执行我的代码时,根据我的异常处理程序“值不在预期范围内”遇到此错误消息。将不胜感激任何输入/更正。

甲骨文代码:

   create or replace PACKAGE BODY PKGFAETEST AS
   PROCEDURE CheckUser(uNAME IN VARCHAR2,
                 pWORD IN VARCHAR2,
                 po_refcsr OUT cursor_type)
   AS                 
   BEGIN 
   OPEN po_refcsr FOR
    SELECT
     A1.ID,
     A1.USERNAME,
     A1.PASS,
     A1.FIRSTNAME,
     A1.LASTNAME
    FROM
     FAE_TEST_USERS A1
    WHERE
     A1.USERNAME = uNAME
     AND A1.PASS = pWORD;
    END;
  END PKGFAETEST;

C#代码:

   public bool checkUser(string uName, string pWord)
    {
        bool result = false;
        try
        {
            string dbUName = string.Empty;
            string dbPWord = string.Empty;
            
            using (OracleConnection conn = new OracleConnection(TNS))
            {
                OracleCommand objCmd = new OracleCommand();
                objCmd.Connection = conn;
                objCmd.CommandText = "PKGFAETEST.CheckUser";
                objCmd.CommandType = CommandType.StoredProcedure;
                objCmd.Parameters.Add("uNAME", SqlDbType.VarChar).Value = uName;
                objCmd.Parameters.Add("pWORD", SqlDbType.VarChar).Value = pWord;
                conn.Open();
                using (OracleDataReader reader = objCmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                            if (reader["USERNAME"] != DBNull.Value)
                            {
                                dbUName = Convert.ToString(reader["USERNAME"]);
                            }
                            if (reader["PASS"] != DBNull.Value)
                            {
                                dbPWord = Convert.ToString(reader["PASS"]);
                            }
                            result = true;
                    }

                }

                conn.Close();
                conn.Dispose();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception caught: {0}", e);
        }
        return result;

    }

标签: c#oracle

解决方案


解决了我的问题:

我只是更改了这行 c# 代码:

     objCmd.Parameters.Add("uNAME", SqlDbType.VarChar).Value = uName;
     objCmd.Parameters.Add("pWORD", SqlDbType.VarChar).Value = pWord;

至:

      objCmd.Parameters.Add("uNAME", OracleDbType.Varchar2).Value = uName;
      objCmd.Parameters.Add("pWORD", OracleDbType.Varchar2).Value = pWord;
      objCmd.Parameters.Add("po_refcsr", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

推荐阅读