powershell System.Collections.Generic.List [System.String] и foreach - PullRequest
0 голосов
/ 21 декабря 2018

Я обнаружил, что у меня есть следующий Общий список, и я вижу, что в нем есть элементы, но когда я пытаюсь запустить код, он не попадает внутрь foreach.Это мой код:

function SQLQueryWriteToFile([string]$SQLquery, [string]$extractFile)
{

   $sqlConnection = New-Object System.Data.SqlClient.SqlConnection

   $sqlConnection.ConnectionString = "Server=blah;Database=blah;User ID=blah;Password=blah"  #production #I have an error in this so it doesn't connect
      $sqlConnection.Open()
   if($sqlConnection.State -ne 'Open'){
      $global:ErrorStrings.Add("Exception: $("Couldn't connect to DB with connection string given");;  ") #this gets hit
   }

###

$global:ErrorStrings = New-Object System.Collections.Generic.List[System.String] #System.Object]
$query = "Select blah"
$dir = "C:\blah"

SQLQueryWriteToFile $query $dir

$errorCodeAsString = ""

foreach ($item in $global:ErrorStrings.Members){
   $errorCodeAsString += $item  #this isn't hit
}

Любая идея, почему он не находит строку ошибки в моем списке для цикла foreach, когда я вижу, что он там просматривает $ global: ErrorStrings?Основываясь на этом списке foreach , я делаю это правильно.У меня проблемы с поиском примеров, как то, что я делаю.Спасибо!

1 Ответ

0 голосов
/ 22 декабря 2018

попробуйте это:

function SQLQueryWriteToFile([string]$SQLquery, [string]$extractFile)
{
  [System.Data.SqlClient.SqlConnection] $sqlConnection=$null
  [System.Data.SqlClient.SqlCommand] $command=$null 
  try
  {
      $sqlConnection = New-Object System.Data.SqlClient.SqlConnection
      $sqlConnection.ConnectionString = "Server=blah;Database=blah;User ID=blah;Password=blah"
      $command = New-Object System.Data.SqlClient.SqlCommand
      $command.Connection=$sqlConnection
      $command.CommandText=$SQLquery

      $sqlConnection.Open()
      $command.ExecuteNonQuery()

  }
  catch
  {
      $global:ErrorStrings.Add($_.Exception.Message)
  }
  finally
  {
      if ($sqlConnection -ne $null) 
      {
        $sqlConnection.Close()
        $sqlConnection.Dispose()
      }

      if ($command -ne $null) 
      {
        $command.Dispose()
      }
  }

}


$global:ErrorStrings = New-Object System.Collections.Generic.List[System.String]
$query = "Select blah"
$dir = "C:\blah"

$global:ErrorStrings.Clear()
SQLQueryWriteToFile $query $dir

$errorCodeAsString=""

for ($i = 0; $i -lt $global:ErrorStrings.Count; $i++)
{ 
    $errorCodeAsString +=$global:ErrorStrings.Item($i)
}

$errorCodeAsString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...