Public/Get-SqliteRow.ps1

function Get-SqliteRow {
  [CmdletBinding()]
  param (
    [Parameter(Mandatory = $true)]
    [SQLiteDBConfig]
    $SqliteDBConfig,

    [Parameter(Mandatory = $true)]
    [string]
    $TableName,

    [Parameter()]
    [System.Collections.IDictionary]
    $ClauseData = @{},

    [Parameter()]
    [Microsoft.Data.Sqlite.SqliteConnection]
    [ValidateNotNull()]
    $SqliteConnection,

    [Parameter()]
    [switch]
    $KeepAlive,

    [Parameter()]
    [switch]
    $CaseSensitive,

    [Parameter(DontShow)]
    [ValidateSet('DataTable', 'DataReader', 'DataSet', 'OrderedDictionary', 'PSCustomObject')]
    [string]
    $As = 'PSCustomObject'
  )

  begin {
    if ($CaseSensitive) {
      Write-Warning 'CaseSensitive is currently not implemented in SqliteHelper.GetRow(). Using default matching behavior.'
    }

    $ownsConnection = $false
    if (!$PSBoundParameters.ContainsKey('SqliteConnection') -or $null -eq $SqliteConnection) {
      $SqliteConnection = [SqliteHelper]::NewConnection($SqliteDBConfig.ConnectionString)
      $ownsConnection = $true
    }
    $result = $null
  }

  process {
    try {
      $result = [SqliteHelper]::GetRow($SqliteDBConfig, $TableName, [hashtable]$ClauseData, $SqliteConnection)
      if ($As -ne 'PSCustomObject') {
        $dataTable = [System.Data.DataTable]::new($TableName)
        foreach ($row in $result) {
          if ($dataTable.Columns.Count -eq 0) {
            foreach ($prop in $row.PSObject.Properties) {
              [void]$dataTable.Columns.Add($prop.Name)
            }
          }
          $dr = $dataTable.NewRow()
          foreach ($prop in $row.PSObject.Properties) {
            $dr[$prop.Name] = if ($null -eq $prop.Value) { [System.DBNull]::Value } else { $prop.Value }
          }
          [void]$dataTable.Rows.Add($dr)
        }

        $result = switch ($As) {
          'DataTable' {
            $dataTable
            break
          }
          'OrderedDictionary' {
            foreach ($row in $dataTable.Rows) {
              $od = [System.Collections.Specialized.OrderedDictionary]::new()
              foreach ($col in $dataTable.Columns) {
                $od[$col.ColumnName] = if ($row[$col] -is [System.DBNull]) { $null } else { $row[$col.ColumnName] }
              }
              $od
            }
            $null
            break
          }
          'DataSet' {
            $ds = [System.Data.DataSet]::new()
            [void]$ds.Tables.Add($dataTable)
            $ds
            break
          }
          'DataReader' {
            # fallback convenience implementation
            $dataTable.CreateDataReader()
            break
          }
          default {
            $null
          }
        }
      }
    } catch {
      # $errorrecord = [Errorrecord]::new...
      # $PSCmdlet.WriteError($errorrecord)
      $null
    } finally {
      if ($ownsConnection -and !$KeepAlive) {
        [SqliteHelper]::CloseConnection($SqliteConnection)
      }
    }
  }

  end {
    return $result
  }
}