c# - Oracle.ManagedDataAccess.Client.OracleException:“ORA-01843:无效月份”
问题描述
我在调试时通过 C# 连接到 Oracle,出现以下错误:Oracle.ManagedDataAccess.Client.OracleException: "ORA-01843: not a valid month"。我以为是路线。更改通过 url 获取变量的方式没有帮助。
甲骨文程序:
PROCEDURE TestSelect(YEARp IN INT, MONTHp IN INT, pResult OUT SYS_REFCURSOR) IS
BEGIN
OPEN pResult FOR
SELECT SUM(LOAD_MATERIALS), REG_DATE
FROM PRODUCTION
WHERE EXTRACT(MONTH FROM REG_DATE) = EXTRACT(MONTH FROM TO_DATE(MONTHp, 'MM')) AND EXTRACT(YEAR FROM REG_DATE) = EXTRACT(YEAR FROM TO_DATE(YEARp, 'YYYY'))
GROUP BY REG_DATE;
END TestSelect;
C#:
[HttpGet("test")]
public List<Charts> GetCertainEmployees(int month, int year)
{
List<Charts> SelectPerem = new List<Charts>();
string conString = "User Id=*; Password=*; Data Source=*";
using (OracleConnection con = new OracleConnection(conString))
{
using (OracleCommand cmd = con.CreateCommand())
{
try
{
con.Open();
cmd.BindByName = true;
cmd.CommandText = "PACKAGE_PRACTICE.TestSelect";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("YEARp", OracleDbType.Int32, month, ParameterDirection.Input);
cmd.Parameters.Add("MONTHp", OracleDbType.Int32, year, ParameterDirection.Input);
var pResult = new OracleParameter("pResult", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.Parameters.Add(pResult);
cmd.ExecuteNonQuery();
var res = (OracleRefCursor)pResult.Value;
var reader = res.GetDataReader();
while (reader.Read())
{
Charts s = new Charts();
s.LOAD_MATERIALS = Convert.ToInt32(reader[0]);
s.REG_DATE = Convert.ToString(reader[1]);
SelectPerem.Add(s);
}
}
finally
{
con.Close();
con.Dispose();
}
}
}
return SelectPerem;
}
错误发生在这一行:
while (reader.Read()) {
解决方案
我解决了这个问题。变量混合在这些行中:
cmd.Parameters.Add("YEARp", OracleDbType.Int32, month, ParameterDirection.Input);
cmd.Parameters.Add("MONTHp", OracleDbType.Int32, year, ParameterDirection.Input);
当心!谢谢大家的时间和答案!
推荐阅读
- git - 如何在 Git 补丁集之间切换
- prometheus - 有没有办法使用度量/标签值从推送网关中删除?
- firebase - 您如何在水平扩展的应用程序上管理 websocket?
- c# - .NET CORE 未选择 Partial - 默认的 Identity UI 布局需要部分视图
- javascript - 角度项目中的会话存储
- python - 带有附加参数的 Django 模型表单将无法验证
- sed - 如何在 sed 中转义字符串变量?
- python - 带有特殊字符的 Powershell /c (PsExec/EncodedCommand)
- properties - Python Kivy:如何将特定对象从屏幕 A 传输到屏幕 B?
- reactjs - 具有多个开关的反应路由器仅渲染第一个开关组件