2016-08-03 5 views
0

Я думаю, что знаю это решение, но я хотел бы получить второе мнение.OLEDB обрезает Oracle LONG тип данных до 100 символов

У меня есть функция Get-Data, которая извлекает и возвращает DataTable из базы данных Oracle. Теперь из-за того, что Powershell является SUPER полезным, когда из Oracle возвращается только одна запись, функция возвращает DataRow вместо DataTable.

Когда это происходит, и один из столбцов является LONG DataType, поле усекается до 100 символов.

Очевидное решение - вернуть, $ dt и изменить мой код для его обработки. Однако, как я уже сказал, мне хотелось второго мнения.

Get-Data:

function Get-Data 
    { 
     [Cmdletbinding()] 
     Param 
     (
      [Parameter(Position=0,Mandatory=$True)]$Conn, 
      [Parameter(Position=1,Mandatory=$True)]$sql 
     ) 
      #Open the connection to the DB if closed 
        if($Conn.state -eq 'Closed') 
      { 
       $Conn.open() 
      } 

      #Create objects for querying the DB 
      $readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$Conn) 
      $readcmd.CommandTimeout = '300' 
      $da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd) 
      $dt = New-Object system.Data.datatable 

      #Query the DB and fill the DataTabe with records 

      [void]$da.fill($dt) 

      return $dt 
    } 
+0

Я попытался вернуть, не изменив, безрезультатно. Проблема сохраняется, пока возвращается только одна запись. –

ответ

0

Хорошо, так что я нашел источник проблемы.

При использовании этого SQL заявление, чтобы выбрать из таблицы с LONG типа данных:

Select * from [table] 

OLEDB возвращает полное содержимое LONG поля от ORACLE

При использовании следующего запроса вместо для того же таблица:

Select distinct * from [table] 

OLEDB возвращает только первые 100 символов в поле LONG

+0

При выполнении тех же запросов в Oracle SQL Developer я получаю полное содержимое поля LONG. –