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-Key: 376176

Url: https://administrator.de/contentid/376176

Printed on: April 30, 2024 at 16:04 o'clock

Member: emeriks
Solution emeriks Jun 06, 2018 at 17:04:37 (UTC)
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.
Member: H41mSh1C0R
H41mSh1C0R Jun 06, 2018 updated at 17:19:12 (UTC)
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
Member: em-pie
Solution em-pie Jun 06, 2018 at 17:25:41 (UTC)
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
Member: H41mSh1C0R
H41mSh1C0R Jun 06, 2018 updated at 18:04:05 (UTC)
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