2010-01-20 262 views
1

我在服務器上安裝了Informix Dynamic Server 11.50和Informix Client SDK 3.5。我正在開發一個.NET應用程序,使用ODBC函數從Informix數據庫讀取數據。對Informix Serial和BigInt數據類型的ODBC支持

在數據庫中,我有一個表中定義了Serial和BigInt數據類型的列。我的數據檢索功能看起來像這樣。

Dim cmd As New Odbc.OdbcCommand 
    Dim da As New Odbc.OdbcDataAdapter 
    Dim ds As New DataSet 
    Dim sb As New StringBuilder("") 

    Try 
     Using cn As New Odbc.OdbcConnection(ConfigurationSettings.AppSettings("connString")) 
      cn.Open() 

      sb.Append("SELECT * FROM InterfaceSP ") 
      sb.Append("join Interface on InterfaceSP.InterfaceID = Interface.InterfaceID ") 
      sb.Append("left join InterfaceSPAction on InterfaceSP.InterfaceSPID = InterfaceSPAction.InterfaceSPID and action_status = 'ACTV' ") 
      sb.Append(" WHERE InterfaceSP.InterfaceID = ? ") 
      sb.Append(" ORDER BY InterfaceSP.SPName") 

      cmd.Connection = cn 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = sb.ToString 
      cmd.Parameters.AddWithValue("@InterfaceID", strInterfaceID) 

      da.SelectCommand = cmd 
      da.Fill(ds, "InterfaceSPList") 

     End Using 

     Return ds 

    Catch ex As Exception 
     Throw ex 
    End Try 

最終結果數據集將被傳遞給數據網格對象。問題是.NET在加載數據網格時會引發異常。

Unknown SQL type - -114. 
[ArgumentException: Unknown SQL type - -114.] 

我試着修改串行和BigInt數據類型的列到整數。而且,一切工作正常,無需修改一行代碼。

我確實需要一些建議如何克服這個問題,因爲我需要串行數據類型列作爲增量id列。對於BigInt數據類型列,可能我們可以將其更改爲具有Integer數據類型的列。

歡迎任何建議。

回答

1

.NET「知道」一組有限的數據類型。從各種數據源檢索數據的.NET數據提供者必須將各種數據類型轉換爲.NET能夠識別的東西。 ODBC .NET數據提供程序內置了一定數量的識別類型。除此之外的任何內容都可能導致錯誤。

爲了解決這個問題,我懷疑你可以在你運行的SQL SELECT語句中強制轉換數據類型。我對Informix並不熟悉,但是使用一些簡單的Google搜索似乎表明,使用此格式columnname::newtype可以完成演員陣容。因此,您需要將SELECT語句中的*替換爲特定字段,然後將有問題的列轉換爲可識別的類型,例如整數:SerialCol::Integer。 (我猜這個類型)。

+0

謝謝,朋友!我必須將所有具有Seri​​al和BigInt數據類型的列都轉換爲Integer,以便它可以工作。這意味着我現在有很多工作要做。唉...... – poh 2010-01-20 08:17:29

+0

@poh:我只是做了一些搜索,看起來有一個本地的Informix .NET數據提供程序(http://publib.boulder.ibm.com/infocenter/idshelp/v10/index .JSP?主題=/com.ibm.relnotes.doc/300xc2/netrel.html)。這幾乎肯定會消除像這樣的數據類型的問題。我專注於回答問題而不是解決問題。 – 2010-01-20 12:52:29

0

需要看看你的CLIENT_locale和你連接字符串的DB_locale設置

相關問題