2016-08-03 13 views
0

Ich denke, ich kenne die Lösung, aber ich möchte eine zweite Meinung bekommen.OLEDB schneidet Oracle LONG Datentyp auf 100 Zeichen ab

Ich habe eine Funktion namens Get-Data, die eine DataTable aus einer Oracle-Datenbank abruft und zurückgibt. Da Powershell SUPER hilfreich ist, gibt die Funktion, wenn nur ein Datensatz von Oracle zurückgegeben wird, eine DataRow anstelle einer DataTable zurück.

Wenn dies geschieht und eine der Spalten ein LONG DataType ist, wird das Feld auf 100 Zeichen gekürzt.

Die offensichtliche Lösung ist, zurückzukehren, $ dt und ändern Sie meinen Code, um damit umzugehen. Wie gesagt, ich wollte eine zweite Meinung.

Get-Daten:

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

Ich habe versucht, die Rückkehr, dt ändern, ohne Erfolg. Das Problem bleibt bestehen, solange nur ein Datensatz zurückgegeben wird. –

Antwort

0

Okay, so fand ich die Ursache des Problems.

Wenn diese SQL-Anweisung Verwendung mit einem LONG-Datentyp aus einer Tabelle auswählen:

Select * from [table] 

OLEDB gibt den vollständigen Inhalt des LONG Feldes von ORACLE

Wenn Sie die folgenden Abfrage stattdessen für die gleiche Verwendung Tabelle:

Select distinct * from [table] 

OLEDB gibt nur die ersten 100 Zeichen des LONG Feld

+0

Beim Ausführen derselben Abfragen in Oracle SQL Developer erhalte ich den gesamten Inhalt des Feldes LONG. –

Verwandte Themen