1

我一直在绞尽脑汁,似乎找不到这个问题的答案。我对 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 论坛的帮助很少。

谢谢大家能给我的任何帮助。

4

1 回答 1

1

您的问题与 .NET 无关,而与您的 SQL 有关。基本上你正在做的是:

执行过程 getagentstateintervaldata (date('11-01-13'),to_date('12:01:00.00', '%H:%M'),to_date('11:59:59.00', '%H:%M '),1,1,1)

我在这段代码中看到两个问题:

1- 如果您在 to_date() 的第一个参数中指定小时、分钟、秒和分数,那么您必须在第二个参数 (%H:%M%S%F) 中使用它们。根据您的引擎版本,“。” 在 %S 和 %F 之间。

2-您正在从 11-01-13 创建一个 date()。这可能不明确,具体取决于您的环境设置(DBDATE 环境变量)。更好的方法是使用 MDY()

希望这可以帮助。问候

于 2013-11-09T00:41:18.323 回答