如何从.Net调用Informix存储过程

时间:2013-11-08 19:23:19

标签: 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, 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论坛的帮助很少。

感谢您提供给我的任何帮助。

1 个答案:

答案 0 :(得分:1)

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

执行程序getagentstateintervaldata(日期(' 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创建日期()。根据您的环境设置(DBDATE环境变量),这可能不明确。更好的方法是使用MDY()

希望这会有所帮助。此致