【发布时间】:2013-11-08 19:23:18
【问题描述】:
我一直在绞尽脑汁,似乎找不到这个问题的答案。我对 Informix 知之甚少。 我需要调用一个名为 getagentstateintervaldata 的 Informix 过程
过程的参数和类型是:
p_eStartDate, DATETIME
p_startTime, DATETIME
p_endTime, DATETIME
p_rgSelected, SMALLINT
p_skillSelected, SMALLINT
p_tmSelected, SMALLINT
我正在使用 IBM Informix ODBC 驱动程序版本 3.70 Visual Studio 2010、VB.Net、.Net Framework 3.5
这是我用来触发该过程的代码。
首先是我用来确保我可以连接到数据库并获取数据的测试代码。 这段代码工作正常,我得到了 dtData 数据表中返回的数据。
Dim dtData As Data.DataTable = New Data.DataTable
Dim xQuery As String = ""
xQuery = "Select *, (t2.EventDateTime + INTERVAL(-6) HOUR TO HOUR) as NewDatTime "
xQuery += "From Resource as t1 "
xQuery += "INNER JOIN AgentStateDetail AS t2 ON t2.agentID = t1.resourceID and t1.dateInactive is null "
xQuery += "Where t1.ResourceLoginId LIKE '51cserv%' "
xQuery += "Order By t2.EventDateTime;"
Dim conn As OdbcConnection = New Odbc.OdbcConnection(sysODBCConnStr)
conn.ConnectionTimeout = 0
Dim objCmd As New Odbc.OdbcDataAdapter(xQuery, conn)
conn.Open()
'Fill the dataset
objCmd.Fill(dtData)
'Close connection
If conn.State = Data.ConnectionState.Open Then conn.Close()
conn.Dispose()
现在是触发 Informix 过程的代码。 这是不断给我错误的那个。我没有任何方法可以像 MS SQL 的管理工作室那样连接到 Informix 数据库。
Dim dtData As Data.DataTable = New Data.DataTable
Dim xQuery As String = ""
xQuery = "execute procedure getagentstateintervaldata (date('11-01-13'),to_date('12:01:00.00', '%H:%M'),to_date('11:59:59.00', '%H:%M'),1,1,1)"
Dim conn As OdbcConnection = New Odbc.OdbcConnection(sysODBCConnStr)
conn.ConnectionTimeout = 0
Dim objCmd As New Odbc.OdbcDataAdapter(xQuery, conn)
conn.Open()
'Fill the dataset
objCmd.Fill(dtData)
'Close connection
If conn.State = Data.ConnectionState.Open Then conn.Close()
conn.Dispose()
我得到的错误是:
错误 [22008] [Informix][Informix ODBC 驱动程序][Informix] 日期时间或间隔值中的字段不正确或在日期时间字段上指定了非法操作。
编辑 - 在这里要清楚一点,我的问题出在 Informix 过程调用中。我不理解正在返回的错误,并且我发现 IBM Informix 论坛的帮助很少。
感谢大家能给我的任何帮助。
【问题讨论】:
-
不熟悉informix。但听起来您的日期时间有问题,如果您使用相同的日期编写选择以检查转换是否正确发生怎么办?这会让您知道您的输入是否正常或存储过程调用中有问题?
-
谢谢AJP,我该怎么做?
-
只是有用的信息,而不是答案。使用 Informix 日期时间数据类型时,您必须告知范围,例如
datetime year to second或datetime hour to fraction,其中选项/限制是年、月、日、小时、分钟、秒、分数...引号)到日期时间字段,您必须编写具有相同限制/范围的文字 -
现在我的想法是……你的
to_date('12:01:00.00', '%H:%M')格式错误,应该是to_date('12:01', '%H:%M')或to_date('12:01:00.00', '%H:%M:%S.%F')
标签: sql vb.net visual-studio-2010 stored-procedures informix