【发布时间】:2016-01-22 17:07:58
【问题描述】:
我有一个 SQL 查询,我将一个 C# 变量传递到我的 Oracle DB。
我无法将 C# 日期时间变量“PROCESS_DATE”传递到我的应用程序的查询中。我没有拿回任何记录。如果我将查询复制到我的 oracle 开发人员工具 TOAD 中,它可以正常工作并且我得到多条记录。
这是我在应用程序中使用的查询:
String SelectAllSQL = "SELECT * FROM REALMS_AUDIT.R2_GROUP_QUERY_RPT WHERE PROCESS_DATE = :pPROCESS_DATE";
我还尝试将 datetime 变量转换为 shortDateString() 以便它与数据库完全匹配我然后使用 TO_DATE 函数,如果我直接在 TOAD 中查询日期,我必须使用该函数,但没有任何运气。 shortDateString() 将我的日期更改为:1/16/2016,这是我需要的,但 OracleDataReader 不喜欢它。这里是使用 TO_DATE 函数的查询:
String SelectAllSQL = "SELECT * FROM REALMS_AUDIT.R2_GROUP_QUERY_RPT WHERE PROCESS_DATE = TO_DATE(:pPROCESS_DATE, 'MM-DD-YYYY'";
:pROCESS_DATE是传入的日期时间变量。
在处理日期时间变量方面必须在 C# 和 Oracle 之间进行细分。 我正在使用 Oracle DataReader 来处理查询。
OracleDataReader dataReader = mDataAccess.SelectSqlRows ( oracleConnection, oracleCommand, sqlCommand, parameters );
while ( dataReader.Read ( ) )
{
groupEntityFacilityRptList.Add ( ReadRecord ( dataReader ) );
}
如果我使用 TO_DATE 函数,应用程序将不会进入 while 循环。如果我使用原始查询,它会执行但不返回任何数据。
日期时间变量 PROCSSDATE 如下所示:
1/16/2016 12:00:00 AM
我注意到它上面有一个时间戳,所以我不确定这是否是问题。
Oracle 中的数据是这样的:
1/16/2016
【问题讨论】:
-
您是否尝试过调试程序以查看您的“.ToShortDateString()”是否为您提供了数据库所需的“1/16/2016”?有时可能会出现与其他时间格式(CultureInfo 等)有关的错误。
-
是的,它以我需要的格式:2016 年 1 月 16 日。问题似乎在于将其传递到查询中。
-
您是否将“SqlConnection”类与 DataSource 等一起使用?如果您使用 SqlConnection,也请使用“SqlCommand”类。这允许您使用 i.E. 添加参数。 cmd.Parameters.Add("@Date", varDate);并像这样执行你的操作:“SELECT * FROM ... WHERE Date = @Date”,所以这些值真的不可能搞砸了。
-
你可以试试
TRUNC(TO_DATE(:pPROCESS_DATE,'MM-DD-YYYY HH:MI:SS AM')) -
@AbdulHameed 我的月份无效。一月显示在“1”而不是“01”会不会有问题?谢谢