【问题标题】:ODBC Support for Informix Serial and BigInt Data Types对 Informix Serial 和 BigInt 数据类型的 ODBC 支持
【发布时间】:2010-02-20 09:26:45
【问题描述】:

我的服务器上安装了 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

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

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

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

我确实需要一些建议来解决这个问题,因为我需要将串行数据类型列作为递增的 id 列。对于 BigInt 数据类型的列,我们可以将其改为 Integer 数据类型的列。

欢迎任何建议。

【问题讨论】:

    标签: .net vb.net odbc informix


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,朋友!我必须将所有具有 Serial 和 BigInt 数据类型的列都转换为 Integer 才能正常工作。这意味着我现在有很多工作要做。叹息……
    • @poh:我只是做了一些搜索,似乎有一个用于 Informix (publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/…) 的本机 .NET 数据提供程序。这几乎肯定会消除此类数据类型的问题。我专注于回答问题而不是解决问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多