3

I need to include some 'TIMESTAMP' fields in SQL-query WHERE clause:

SELECT * FROM PERSON WHERE PSN_CREATED_DATE >= :createdPrior

In my code, createdPrior parameter is defined in the following way

...
command.Parameters.Add(":createdPrior", Miscellaneous.convertToOracleTimeStamp(createdPrior));
...

static class Miscellaneous
{
    public static OracleTimeStamp convertToOracleTimeStamp(DateTime dateTime)
    {
        OracleTimeStamp result = new OracleTimeStamp(dateTime);
        return result;
    }
}

And as a result I receive a following exception

Exception: Additional information: ORA-00932: inconsistent datatypes: expected TIMESTAMP got NUMBER

Could you tell me, how to pass DateTime in SQL-query for Oracle DB?

P.S. What I've tried: -I've created an Oracle Parameter with characteristics

OracleParameter para = new OracleParameter();
para.ParameterName = ":createdPrior";
para.Direction = System.Data.ParameterDirection.Input;
para.OracleDbType = OracleDbType.TimeStamp;
para.Value = Miscellaneous.convertToOracleTimeStamp(createdPrior);

-I've passed just DateTime. And I've received another exception

-I've tried to convert parameter to DATE type (using to_date() method), but in this case it seems that I'm loosing minutes and seconds

Eugene
  • 5,353
  • 6
  • 27
  • 37
  • possible duplicate of [How to pass datetime from c# to sql correctly?](http://stackoverflow.com/questions/6570621/how-to-pass-datetime-from-c-sharp-to-sql-correctly) – Liam Apr 22 '14 at 09:07
  • 1
    You need to use `SqlDbType.DateTime`, don't use `ToString()` – Liam Apr 22 '14 at 09:08
  • Actually scratch that, if your using a timestamp, you shouldn't pass a datetime in **at all**. Timestamp *stamps the time*. I.e. SQL add's this for you. – Liam Apr 22 '14 at 09:10

2 Answers2

3

Do this one:

SELECT * FROM PERSON WHERE PSN_CREATED_DATE >= TO_TIMESTAMP(:createdPrior, 'yyyyMMddHH24missffff')

or use TimeStamp paramater in C#, should be like this

OracleParameter para = new OracleParameter(":createdPrior", OracleDbType.TimeStamp, ParameterDirection.Input);
para.Value = (Oracle.DataAccess.Types.OracleTimeStamp)value;
command.Parameters.Add(para);
Wernfried Domscheit
  • 54,457
  • 9
  • 76
  • 110
0

Try using OracleParameter

OracleParameter para = new OracleParameter();
para.ParameterName = ":createdPrior";
para.Direction = ParameterDirection.Input;
para.DbType = DbType.DateTime;
para.Value = value;

command.Parameters.Add(para);
Florent Gz
  • 934
  • 1
  • 10
  • 22