Поддержка ODBC для последовательных типов данных Informix и BigInt - PullRequest
1 голос
/ 20 января 2010

На моем сервере установлены Informix Dynamic Server 11.50 и Informix Client SDK 3.5. Я занимаюсь разработкой приложения .NET для чтения данных из базы данных Informix с использованием функций 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.]

Я пытался изменить столбцы с типами данных Serial и BigInt на Integer. И все работает отлично без изменения одной строки кода.

Мне нужен совет, как решить эту проблему, так как мне нужен столбец с последовательным типом данных в качестве столбца с возрастающим идентификатором. Для столбца типа данных BigInt может быть вместо этого мы можем изменить его на столбец с типом данных Integer.

Любой совет приветствуется.

Ответы [ 2 ]

1 голос
/ 20 января 2010

.NET «знает» о конечном наборе типов данных. Поставщики данных .NET, которые получают данные из различных источников данных, должны преобразовывать различные типы данных во что-то, что распознает .NET. В провайдере данных ODBC .NET встроено определенное количество распознанных типов. Все, что находится за пределами этого набора, может привести к ошибке.

Чтобы обойти это, я подозреваю, что вы можете привести тип данных в выполняемый оператор SQL SELECT. Я не знаком с Informix, но, похоже, небольшое прибегание к поиску в Google указывает, что приведение выполняется с этим форматом columnname::newtype. Поэтому вам нужно заменить * в операторе SELECT конкретными полями, а затем привести проблемные столбцы к распознанному типу, например целому числу: SerialCol::Integer. (Я предполагаю, на тип).

0 голосов
/ 20 февраля 2010

нужно посмотреть ваши CLIENT_locale и настройки DB_locale вашей строки подключения

...