Sql 如何从.Net调用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

我一直在绞尽脑汁,似乎找不到这个问题的答案。我对Informix知之甚少。 我需要调用名为getagentstateintervaldata的Informix过程

该程序的参数和类型如下:

    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]在日期时间或间隔分数中缺少小数点。