首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle.ManagedDataAccess.Client.OracleException:"ORA-01843:无效月份“

Oracle.ManagedDataAccess.Client.OracleException:"ORA-01843:无效月份“
EN

Stack Overflow用户
提问于 2021-05-17 01:21:22
回答 1查看 87关注 0票数 0

我在调试时通过C#连接到Oracle,得到以下错误: Oracle.ManagedDataAccess.Client.OracleException:"ORA-01843: not a valid month“。我以为这就是路线。改变通过url获取变量的方式并没有什么帮助。

Oracle过程:

代码语言:javascript
复制
    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#:

代码语言:javascript
复制
        [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;
        }

错误出现在下面这一行:

代码语言:javascript
复制
while (reader.Read()) {
EN

回答 1

Stack Overflow用户

发布于 2021-05-17 02:20:35

我解决了这个问题。变量在以下行中混合在一起:

代码语言:javascript
复制
cmd.Parameters.Add("YEARp", OracleDbType.Int32, month, ParameterDirection.Input);
cmd.Parameters.Add("MONTHp", OracleDbType.Int32, year, ParameterDirection.Input);

注意!感谢大家的宝贵时间和回答!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67559595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档