Sql 如何从.Net调用Informix存储过程
我一直在绞尽脑汁,似乎找不到这个问题的答案。我对Informix知之甚少。 我需要调用名为getagentstateintervaldata的Informix过程 该程序的参数和类型如下:Sql 如何从.Net调用Informix存储过程,sql,vb.net,visual-studio-2010,stored-procedures,informix,Sql,Vb.net,Visual Studio 2010,Stored Procedures,Informix,我一直在绞尽脑汁,似乎找不到这个问题的答案。我对Informix知之甚少。 我需要调用名为getagentstateintervaldata的Informix过程 该程序的参数和类型如下: p_eStartDate, DATETIME p_startTime, DATETIME p_endTime, DATETIME p_rgSelected, SMALLINT p_skillSelected, SMALLINT p_tmSelected, SMA
p_eStartDate, DATETIME
p_startTime, DATETIME
p_endTime, DATETIME
p_rgSelected, SMALLINT
p_skillSelected, SMALLINT
p_tmSelected, SMALLINT
我正在使用IBMInformixODBC驱动程序版本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的Management studio那样连接到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]
datetime或interval值中的字段不正确,或者在datetime字段中指定了非法操作
编辑-
这里需要澄清的是,我的问题在于Informix过程调用。我不理解返回的错误,我发现IBMInformix论坛没有什么帮助
谢谢你们能给我的任何帮助。你们的问题与.NET无关,而是与SQL有关。基本上你正在做的是: 执行过程getagentstateintervaldata(日期('11-01-13')、至日期('12:01:00.00','%H:%M')、至日期('11:59:59.00','%H:%M')、1,1) 我在该代码中看到两个问题: 1-如果在to_date()的第一个参数中指定了小时、分钟、秒和分数,则必须在第二个参数(%H:%M%S%F)中使用它们。根据您的引擎版本,在%S和%F之间有一个“.” 2-您正在从2013年11月1日创建日期()。这可能不明确,具体取决于您的环境设置(DBDATE环境变量)。更好的方法是使用MDY()
希望这有帮助。关于您的问题与.NET无关,而是与SQL有关。基本上你正在做的是: 执行过程getagentstateintervaldata(日期('11-01-13')、至日期('12:01:00.00','%H:%M')、至日期('11:59:59.00','%H:%M')、1,1) 我在该代码中看到两个问题: 1-如果在to_date()的第一个参数中指定了小时、分钟、秒和分数,则必须在第二个参数(%H:%M%S%F)中使用它们。根据您的引擎版本,在%S和%F之间有一个“.” 2-您正在从2013年11月1日创建日期()。这可能不明确,具体取决于您的环境设置(DBDATE环境变量)。更好的方法是使用MDY()
希望这有帮助。不熟悉informix。但听起来好像datetime有问题,如果您使用相同的日期编写select来检查转换是否正确呢?这将让您知道存储过程调用中的输入是正确的还是出错了?谢谢AJP,我该怎么做?只是有用的信息,而不是答案。使用Informix datetime数据类型时,必须通知范围,例如
datetime年到秒
或datetime小时到分数
,其中选项/限制为年、月、日、小时、分钟、秒、分数。。。当您在datetime字段中写入文字值(引号之间)时,您必须使用相同的限制/范围来写入文字现在我认为是这样的。。。您的截止日期('12:01:00.00','%H:%M')
格式错误,应该是截止日期('12:01','%H:%M')
或截止日期('12:01:00.00','%H:%M:%S.%F')
不熟悉informix。但听起来好像datetime有问题,如果您使用相同的日期编写select来检查转换是否正确呢?这将让您知道存储过程调用中的输入是正确的还是出错了?谢谢AJP,我该怎么做?只是有用的信息,而不是答案。使用Informix datetime数据类型时,必须通知范围,例如datetime年到秒
或datetime小时到分数
,其中选项/限制为年、月、日、小时、分钟、秒、分数。。。当您在datetime字段中写入文字值(引号之间)时,您必须使用相同的限制/范围来写入文字现在我认为是这样的。。。你的截止日期('12:01:00.00','%H:%M')
格式错误,应该是截止日期('12:01','%H:%M')
或截止日期('12:01:00.00','%H:%M:%S.%F')
谢谢你,费尔南多,我知道问题在于执行过程的SQL调用,我需要的是对Informix过程调用的帮助。我尝试了你的到目前为止('12:01:00.00','%H:%M:%S.%F')
的建议,但得到了以下错误:错误[HY000][Informix][Informix ODBC Driver][Informix]在日期时间或间隔分数中缺少小数点。
谢谢你,费尔南多,我知道问题在于执行该过程的SQL调用,我需要的是对Informix的过程调用的帮助。我尝试了你的到日期('12:01:00.00','%H:%M:%S.%F')
的建议,得到了这个错误:错误[HY000][Informix][Informix ODBC Driver][Informix]在日期时间或间隔分数中缺少小数点。