Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 第二个日期参数ORA-01843:不是有效的月份错误_Sql_Oracle_Datetime_Oraclecommand - Fatal编程技术网

Sql 第二个日期参数ORA-01843:不是有效的月份错误

Sql 第二个日期参数ORA-01843:不是有效的月份错误,sql,oracle,datetime,oraclecommand,Sql,Oracle,Datetime,Oraclecommand,我有一个查询,需要使用Oracle检查两个日期之间的日期。每当我运行代码时,我都会得到一个ORA-01843:非有效月份错误。但是,每当我从sql中删除这两个参数中的任何一个时,它都可以正常工作,但是尝试使用两个日期参数会抛出错误。我错过了什么 StringBuilder sql = new StringBuilder(); DateTime yearBegin = new DateTime(Convert.ToInt32(taxYear) + 1, 1, 1);

我有一个查询,需要使用Oracle检查两个日期之间的日期。每当我运行代码时,我都会得到一个ORA-01843:非有效月份错误。但是,每当我从sql中删除这两个参数中的任何一个时,它都可以正常工作,但是尝试使用两个日期参数会抛出错误。我错过了什么

        StringBuilder sql = new StringBuilder();
        DateTime yearBegin = new DateTime(Convert.ToInt32(taxYear) + 1, 1, 1);
        DateTime yearEnd = new DateTime(Convert.ToInt32(taxYear) + 1, 12, 31);
        sql.Append(
            "SELECT * FROM TABLE WHERE FIELD = '1099' AND CREATED_DT >= TO_DATE(:createdYearBegin, 'MM/DD/YYYY') AND CREATED_DT <= TO_DATE(:createdYearEnd, 'MM/DD/YYYY') AND SSN = :ssn");
        try
        {
            using (OracleConnection cn = new OracleConnection(ConfigurationManager.AppSettings["cubsConnection"]))
            using (OracleCommand cmd = new OracleCommand(sql.ToString(), cn))
            {
                cmd.Parameters.Add("ssn", ssn);
                cmd.Parameters.Add("createdYearBegin", yearBegin.ToShortDateString());
                cmd.Parameters.Add("createdYearEnd", yearEnd.ToShortDateString());
                cn.Open();
                OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                ret = dr.HasRows;
            }
        }

认为您的参数顺序有问题

如果不按名称绑定参数,则它们按位置绑定意味着添加参数的顺序

请尝试添加:

cmd.BindByName = true;

您希望日期格式为MM/DD/YYYY,但不能保证ToSortDateString以这种格式返回。需要一个格式说明。但是,我甚至不知道您用来提供进一步帮助的编程语言是什么…

打印出ToSortDateString的结果,您将看到发生了什么。另外,我同意您应该提供一种格式,因为您不能依赖默认值。

c中的DateTime使用0到11?真正地这是从哪里来的?在我看来像Java,而OP没有提供语言标签。删除了我答案中的这一部分。日期显示正确,如果ToSortDateString的结果有问题,那么是否有一个或两个日期参数也会有相同的问题,但是如果我删除一个或另一个日期参数,并且只使用其中一个参数运行它,则效果会很好。@UnHolyRam我发现了其他一些问题,你能试一试吗?我们赢了。感谢在调试器中观看时,日期是正确的,如果ToSortDateString的结果有问题,那么是否有一个或两个日期参数也会有同样的问题,但是如果我删除一个或另一个日期参数,只需使用其中一个参数就可以运行它了。那么,您能看到使用这两个日期生成的sql是什么吗?这里的示例:虽然我不得不在日期周围添加单引号,但sql还是如预期的那样:选择*FROM TABLE,其中FIELD='1099'和CREATED_DT>=to_DATE'1/1/2014','MM/DD/YYYY'和CREATED_DT