ODBC支持Informix Serial和BigInt数据类型

时间:2010-01-20 02:59:36

标签: .net vb.net odbc informix

我的服务器上安装了Informix Dynamic Server 11.50和Informix Client SDK 3.5。我正在开发一个.NET应用程序,使用ODBC函数从Informix数据库中读取数据。

在数据库中,我有一个表,其中定义了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

最终结果数据集将传递给datagrid对象。问题是每当加载数据网格时.NET都会抛出异常。

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

我尝试将Serial和BigInt数据类型的列修改为Integer。并且,一切正常,无需修改单行代码。

我确实需要一些建议如何克服这个问题,因为我需要将串行数据类型列作为递增id列。对于BigInt数据类型列,我们可以将其更改为具有Integer数据类型的列。

欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

.NET“知道”一组有限的数据类型。从各种数据源检索数据的.NET数据提供程序必须将各种数据类型转换为.NET可识别的数据类型。 ODBC .NET数据提供程序内置了一定数量的已识别类型。该集合之外的任何内容都可能导致错误。

为了解决这个问题,我怀疑你可以在你运行的SQL SELECT语句中转换数据类型。我不熟悉Informix,但是一点点谷歌搜索似乎表明使用这种格式columnname::newtype完成了演员表。因此,您需要将SELECT语句中的*替换为特定字段,然后将有问题的列转换为可识别的类型,例如integer:SerialCol::Integer。 (我猜这种类型)。

答案 1 :(得分:0)

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