这对你来说很奇怪。我正在对一个看起来像这样的表运行一个简单的查询:
select expiration_date from Tbl where expiration_date > sysdate - 1
在SQL Developer中,这将返回35行。使用OraOLEDB.Oracle
提供程序调用完全相同的SQL语句的VB.NET应用程序仅返回30行。
这是我的连接字符串(为易读性而分解):
Provider=OraOLEDB.Oracle;
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)
(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xe)));
User Id=rps;
Password=*******;
OLEDB.NET=True;
这是示例代码(我们在通用ASHX处理程序的ProcessRequest
部分中):
Dim conn As OleDbConnection = New OleDbConnection(ConfigurationManager.AppSettings("ConnectionString"))
conn.Open()
Dim cmd As OleDbCommand = conn.CreateCommand()
Dim sql As String = "select expiration_date from Tbl where expiration_date > sysdate - 1"
cmd.CommandText = sql
Dim reader As OleDbDataReader = cmd.ExecuteReader()
context.Response.ContentType = "text/plain"
context.Response.Write("RESULTS: " & vbCrLf)
Dim i As Int32 = 1
While reader.Read()
context.Response.Write(i.ToString() & ". " & reader.GetValue(0).ToString() & vbCrLf)
i = i + 1
End While
reader.Close()
cmd.Dispose()
conn.Close()
conn.Dispose()
如果我将查询更改为说... where expiration_date < sysdate + 15
,那么它可以正常工作。
到底是怎么回事?如果有帮助,这是ODAC 11.2.0.3。
更新1:我删除了ODAC 11.2.0.3并升级到ODAC 12.1.0.1(ORAOLEDB12.DLL)。行为不变。
更新2:这很有趣。我切换到ODP.NET只是为了看看会发生什么。你猜怎么着?同样的结果。我甚至不能责怪提供者了。我需要喝一杯。
更新3:最后有个明智的想法,看看哪些日期被排除在外。在今天之后的11月份,有五个expiration_dates应该包含在结果中。那些正是那些被排除在外的人。所以当从C#调用时,sysdate-1没有做你期望的事情。是时候再喝一杯了。
答案 0 :(得分:1)
COMMIT
任何事情。我垂头丧气,只能希望这会成为别人的警告。