2016-08-03 1 views
0

Je pense que je connais la solution à cela mais j'aimerais avoir une deuxième opinion.OLEDB tronquant le type de données Oracle LONG à 100 caractères

J'ai une fonction appelée Get-Data qui récupère et retourne un DataTable à partir d'une base de données Oracle. Maintenant, en raison de Powershell étant super utile, quand un seul enregistrement est retourné à partir d'Oracle, la fonction renvoie un DataRow au lieu d'un DataTable.

Lorsque cela se produit et que l'une des colonnes est un LONG DataType, le champ est tronqué à 100 caractères. La solution évidente est de retourner, $ dt et de modifier mon code pour gérer cela. Cependant, comme je l'ai dit, je voulais un deuxième avis.

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

J'ai essayé le retour, dt changer, en vain. Le problème persiste tant qu'un seul enregistrement est renvoyé. –

Répondre

0

Ok, donc j'ai trouvé la source du problème.

Lors de l'utilisation de cette instruction SQL pour sélectionner à partir d'une table avec un LONG datatype:

Select * from [table] 

OLEDB retourne le contenu complet du champ LONG de ORACLE

Lors de l'utilisation de la requête suivante à la place pour le même tableau:

Select distinct * from [table] 

renvoie OLEDB seuls les 100 premiers caractères du champ LONG

+0

Lors de l'exécution des mêmes requêtes dans Oracle SQL Developer, je reçois l'intégralité du contenu du champ LONG. –