c# - 遇到错误:值不在预期范围内
问题描述
我正在访问我的 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# 代码:
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;
推荐阅读
- swift - 如何快速获取所有可用的wifi网络名称列表
- google-sheets - 给出不正确输出的工作表查询公式
- javascript - 将数据数组格式化为对象
- django - 我的模型中的 AutoField 和 oracle 数据库中的序列有问题
- excel - VBA 的动态行链接
- reactjs - 让 React 表单使用 Formik 发送电子邮件
- css - Bootstrap Sizing 小于 25%
- javascript - 如何从 vue js 中的另一个组件获取布尔数据?
- c# - 嵌套的一对多表 SQLite-Net Extensions
- sql - SQL 三表连接使用两个 id 和另一列