h41msh1c0r
Goto Top

Powershell DataTable Spalten und zuviel Sonne

Einen sonnigen in die Runde,

ich habe folgendes Szenario:

 $Result = New-Object System.Data.DataTable
 $Result = ExecuteSqlQuery $Server $Database $userSqlQuery $User $Pwd

Ich bekomme auch alle Spalten zurück die ich im Query drinnen habe.
Jetzt habe ich eine Spalte die enthält boolean Werte und liefert dem entsprechend True oder False zurück.
In einer Nutzerfreundlichen Ansicht für Office Nutzer macht sich das blöd, da sollte dann "Depot" oder "Share" stehen.

Also eine Spalte hinzugefügt:

 $Result.Table.Column.Add("Bereitstellung") = ""  

Spalte da und jetzt in Abhängigkeit zur letzten Spalte(die mit den bool Werten) aus dem Query die neue Spalte befüllen:

 $Result | % {
 if($_[8]){
  $_[9] = "Depot"  
 }else{
 $_[9] = "Share"     
 }
 }

Wenn ich nun im Query nur 1 Datensatz einlese bekomme ich das gewünschte verhalten.
Sobald ich mehr als 1 Datensatz bekomme folgenden Fehler:

Exception calling "Add" with "1" argument : Collection was of a fixed size  

So richtig schlau werd ich noch nicht von der Meldung.

Das "Add" gilt doch für die DataTable und ob die nun 1 Datensatz oder 100 enthält sollte doch wurscht sein.

Hat einer eine plausible Erklärung?

VG
*Gardine zuzieh, eindeutig zuviel Sonne*

Content-ID: 376176

Url: https://administrator.de/forum/powershell-datatable-spalten-und-zuviel-sonne-376176.html

Ausgedruckt am: 16.04.2025 um 16:04 Uhr

emeriks
Lösung emeriks 06.06.2018 um 19:04:37 Uhr
Goto Top
Hi,
was steht in $userSqlQuery ?
Du könntest dort die Spalte "Bereitstellung" gleich mit einbauen, in dem Du z.B. die Boolean-Spalte doppelts
select ............., (CASE [BooleanSpalte] WHEN True THEN "Depot" ELSE "Share") AS [Bereitstellung]  
oder so ähnlich. Was ist das für eine DB?

E.
H41mSh1C0R
H41mSh1C0R 06.06.2018 aktualisiert um 19:19:12 Uhr
Goto Top
Hi,

[string] $UserSqlQuery = $(" SELECT  [Spalte1]     as 'Spalte1'  
                                     ,[Spalte2]     as 'Spalte2'  
.... bis Spalte 8
                                                  FROM    <DB>
                                                  WHERE  <Filter>
                                                  ORDER BY <Spalte1>
")  

Das "as Spalte1" enthält dann jeweils einen Fachbezug zum Inhalt.

Die DB ist eine MS SQL 2014.

Ich schau grad wie das mit dem Case funktioniert. =)

VG
em-pie
Lösung em-pie 06.06.2018 um 19:25:41 Uhr
Goto Top
Moin,

wäre auch mein Vorschlag, das direkt ins SQL-Statement mit einzubauen:

SELECT 
 , [Spalte 1]
 , CASE [Spalte 1]
  WHEN True THEN "Depot"  
  WHEN False THEN "Share"  
  ELSE "unknown"  
 END AS Spalte1_Cust
 , [Spalte 2] 
 , ...
FROM
 myTable

CASE WHEN

Gruß
em-pie
H41mSh1C0R
H41mSh1C0R 06.06.2018 aktualisiert um 20:04:05 Uhr
Goto Top
Dank euch beiden für die fixe Antwort.

*Lüppt*

SELECT
 , [Spalte1]
 , (CASE [Spalte1]
    WHEN 'True' Then 'Depot'   
    WHEN 'False' Then 'Share'  
    END) as 'Bereitstellung'   
.......

VG