Если вы используете собственный поставщик данных Oracle, а не драйвер Microsoft, тогда вы можете получить все типы полей
Dim cn As New Oracle.DataAccess.Client.OracleConnection
Dim cm As New Oracle.DataAccess.Client.OracleCommand
Dim dr As Oracle.DataAccess.Client.OracleDataReader
Строка подключения не требует значения провайдера, поэтому вы должны использовать что-то вроде:
"Data Source=myOracle;UserID=Me;Password=secret"
Открыть соединение:
cn.ConnectionString = "Data Source=myOracle;UserID=Me;Password=secret"
cn.Open()
Присоединить команду и установить оператор Sql
cm.Connection = cn
cm.CommandText = strCommand
Установить размер выборки.Я использую 4000, потому что он такой же большой, как varchar, который может быть
cm.InitialLONGFetchSize = 4000
Запустите считыватель и прокрутите записи / столбцы
dr = cm.ExecuteReader
Do while dr.read()
strMyLongString = dr(i)
Loop
Вы можете быть более конкретным с прочтением, напримерdr.GetOracleString (i) dr.GetOracleClob (i) и т. д., если вы сначала идентифицируете тип данных в столбце.Если вы читаете тип данных LONG, то простой dr(i)
или dr.GetOracleString(i)
работает нормально.Ключ должен гарантировать, что InitialLONGFetchSize достаточно большой для типа данных.Также обратите внимание, что собственный драйвер не поддерживает CommandBehavior.SequentialAccess
для считывателя данных, но он вам не нужен, а также поле LONG даже не должно быть последним полем в операторе select.