我的服务器上安装了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数据类型的列。
欢迎任何建议。
答案 0 :(得分:1)
.NET“知道”一组有限的数据类型。从各种数据源检索数据的.NET数据提供程序必须将各种数据类型转换为.NET可识别的数据类型。 ODBC .NET数据提供程序内置了一定数量的已识别类型。该集合之外的任何内容都可能导致错误。
为了解决这个问题,我怀疑你可以在你运行的SQL SELECT语句中转换数据类型。我不熟悉Informix,但是一点点谷歌搜索似乎表明使用这种格式columnname::newtype
完成了演员表。因此,您需要将SELECT语句中的*
替换为特定字段,然后将有问题的列转换为可识别的类型,例如integer:SerialCol::Integer
。 (我猜这种类型)。
答案 1 :(得分:0)
需要查看您的CLIENT_locale和连接字符串的DB_locale设置