Заполните поле со списком результатами SQL и проигнорируйте дополнительный вывод - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть приложение, которое я сделал с помощью PowerShell, которое получает информацию из базы данных SQL для различных элементов управления.Мой «Вид», иногда будет работать отлично.Но если я закрою приложение и снова открою, одна и та же вещь может дать разные результаты.Я установил PS для запуска от имени администратора, но опять та же проблема.Представление должно прочитать результаты 1971 года и выглядеть как

#ASP.Net Client Ugrade
C# Client Upgrade
Another Basic Project Name

Однако, хотя иногда это работает правильно ... вывод, который я получаю, когда решает не загружаться правильно, равен

#ASP.Net Client Ugrade
1971
void Open(), void IDbConne

Я не уверен, почему он добавляет информацию о свойствах вместо запрашиваемых значений.Также не уверен, почему результаты иногда бывают правильными, а иногда и неправильными, при том же поведении (просто запустив программу, окно заполняется при загрузке).Соответствующий код для того, как я выбираю и заполняю данные:

[string[]]$projectsAll = ""  #I only do it this way because the sql query is actually in a method, were I return the array-and then do the foreach item in the array add to the projectview  
$query = "select Title from OversightProjectsFix where ID > 0 Order By Title"
    if ($sqlcon.State -eq 'Closed'){$sqlcon.Open()}
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $query
    $SqlCmd.Connection = $sqlcon
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $ds = New-Object System.Data.DataSet
    $SqlAdapter.Fill($ds)|out-null
    foreach ($Row in $ds.Tables[0].Rows)
    { 
        $projectsAll += "$($Row.Title)"
    }
$ProjectView.Items.Clear()
foreach ($p in $projectsAll)
{
$ProjectView.Items.Add($p)
}

Как я упоминал ранее, если этот код выполняется, вы всегда должны получать одинаковые результаты, но этот возвращается по-разному, и я 'я не уверен почему?Как я могу сделать так, чтобы это всегда работало?

1 Ответ

0 голосов
/ 21 февраля 2019

Трудно понять, что именно не так с этим фрагментом кода, но я думаю, что это может быть потому, что DataSet пуст, а вы есть.то есть я думаю, что он не соединяет и не извлекает какие-либо данные.

Поскольку набор данных инициализируется с помощью New-Object, если он не заполняется должным образом, происходит, если вы попытаетесь выполнить итерацию по нему, используя кавычки, вместо добавления его в качестве прямого назначения, это может вызвать егонеожиданно вернуть тип данных вместо «ожидаемой» нулевой или пустой строки.Вы можете увидеть это, когда попробуете что-то вроде этого:

$ds = New-Object System.Data.DataSet

#Returns Null
PS> $ds.Tables[0].Rows
PS> 

#Returns data type
PS> "$ds.Tables[0].Rows"
System.Data.DataSet.Tables[0].Rows

Так что вам, возможно, придется удалить кавычки, например:

$projectsAll += $Row.Title

Вы должны добавить проверку, чтобы увидеть, есть ли набор данныхчто-то, прежде чем пытаться повторить и добавить что-либо.

Кроме того, обычно путем реализации метода $SqlAdapter.Fill($ds) открывается соединение без необходимости явного открытия соединения SQL.Интересно, это связано с непредвиденным открытием / закрытием соединения SQL?

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