对Informix Serial和BigInt数据类型的ODBC支持

问题描述:

我在服务器上安装了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数据类型的列。

欢迎任何建议。

.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

需要看看你的CLIENT_locale和你连接字符串的DB_locale设置