簡體   English   中英

如何從.Net調用Informix存儲過程

[英]How do I call an Informix Stored Procedure from .Net

我一直在絞盡腦汁,似乎找不到這個問題的答案。 我對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的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]日期時間或間隔值中的字段不正確,或者在日期時間字段中指定了非法操作。

編輯 -這里要清楚,我的問題是在Informix過程調用中。 我不了解所返回的錯誤,對於IBM Informix論壇而言,我發現的幫助很小。

謝謝大家提供的任何幫助。

您的問題與.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-您要從13-01-13創建date()。 根據您的環境設置(DBDATE環境變量),這可能是不明確的。 更好的方法是使用MDY()

希望這可以幫助。 問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM