订购

2015-01-20 106 views
0

这里有一台,从字面上有我拉我的头发:订购

如果我使用下面的代码:

SQL = "SELECT * from Incident WHERE" 
SQL = SQL & " active=1 ORDER BY incidentdate" 
Recordset.Open SQL,Connection 
Do While NOT Recordset.Eof 
    idate = FormatDateTime(Recordset("incidentdate"),vbShortDate) 
    inumber = Recordset("incidentnum") 

    Response.Write inumber & "<br />" & vbCrLf 
    Response.Write idate & vbCrLf 
    Recordset.MoveNext  

Loop 

我得到以下输出:

2015-U1-FO-001 
01/17/2015 

如果我在Do While...行之后切换行,所以我的代码如下所示:

SQL = "SELECT * from Incident WHERE" 
SQL = SQL & " active=1 ORDER BY incidentdate" 
Recordset.Open SQL,Connection 
Do While NOT Recordset.Eof 
    inumber = Recordset("incidentnum") 
    idate = FormatDateTime(Recordset("incidentdate"),vbShortDate) 

    Response.Write inumber & "<br />" & vbCrLf 
    Response.Write idate & vbCrLf 
    Recordset.MoveNext  

Loop 

我的输出更改为:

2015-U1-FO-001 
12/30/1899 

这似乎引起Recordset("incidentdate")返回一个空字符串。

关于我所忽略的任何想法?

+1

入射一个看法? IncidentDate是否有CASE(或COALESCE/ISNULL)?我已经看到类似的边缘案例根据执行计划在SQL Server中出现......但我不确定为什么执行计划会在这两种情况下发生变化。 – 2015-01-20 23:20:05

+1

可以做更多的细节,是'事件'的表或视图,你可以发布视图架构? – Lankymart 2015-01-20 23:34:40

回答

3

我不相信上述的任何事情。

  1. 游标可能会限制更改的移动,可写性和可见性,但决不能确定您是否可以(以任何顺序)读取当前记录的字段。
  2. .Fields集合可以按编号名称编入索引。在第二种情况下,SELECT语句中字段名的(可能的)顺序无关紧要。

证据:

Option Explicit 

Dim sCS : sCS  = "Provider=SQLOLEDB;User ID=...;Password=...;Initial Catalog=Trials;Data Source=WINXPSP3\SQLEXPRESS;" 
Dim oDb : Set oDb = CreateObject("ADODB.Connection") 
oDb.Open sCS 
Dim oRs : Set oRs = CreateObject("ADODB.Recordset") 
oRs.Open "SELECT TOP 3 * FROM [Alpha]", oDb 
WScript.Echo oRs.CursorType, "adOpenForwardOnly 0 Default. Uses a forward-only cursor" 
WScript.Echo oRs.GetString(2, , vbTab, vbCrLf, "<Null>") 
oRs.Close 
WScript.Echo "-----------" 
oRs.Open "SELECT TOP 3 * FROM [Alpha]", oDb 
WScript.Echo oRs("StartDate") 
WScript.Echo oRs("Id") 
oRs.Close 
WScript.Echo "-----------" 
oRs.Open "SELECT TOP 3 * FROM [Alpha]", oDb 
WScript.Echo oRs("Id") 
WScript.Echo oRs("StartDate") 
oRs.Close 
WScript.Echo "-----------" 
oRs.Open "SELECT TOP 3 * FROM [Alpha]", oDb 
WScript.Echo oRs("StartDate") 
WScript.Echo oRs("Id") 
WScript.Echo oRs("Id") 
WScript.Echo oRs("StartDate") 
oRs.MoveNext 
WScript.Echo "..........." 
WScript.Echo oRs("StartDate") 
WScript.Echo oRs("Id") 
oRs.MoveNext 
WScript.Echo "..........." 
WScript.Echo oRs("Id") 
WScript.Echo oRs("StartDate") 
oRs.Close 
oDb.Close 

输出:

cscript 28054592.vbs 
0 adOpenForwardOnly 0 Default. Uses a forward-only cursor 
209  10.06.2002  11.02.2003  2090 
418  28.04.2000  10.06.2000  4180 
627  03.09.2000  01.11.2000  6270 

----------- 
10.06.2002 
209 
----------- 
209 
10.06.2002 
----------- 
10.06.2002 
209 
209 
10.06.2002 
........... 
28.04.2000 
418 
........... 
627 
03.09.2000 
+0

如果我是诚实的,我有同样的观点。 – Lankymart 2015-01-20 23:32:08