使用SQL结果填充组合框并忽略额外输出

问题描述 投票:0回答:1

我有一个使用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)
}

正如我之前提到的,如果运行相同的代码,你应该总是得到相同的结果 - 但是这个结果会有所不同,我不知道为什么?我怎样才能让它始终有效?

sql-server winforms powershell view
1个回答
0
投票

很难理解这段代码的确切错误,但我认为这可能是因为DataSet是空的,而你是。即我认为它不是连接和拉动任何数据。

由于数据集是使用New-Object初始化的,如果它没有正确填充,那么如果您尝试使用引号迭代它而不是将其添加为直接赋值,则可能会导致它意外地返回数据类型而不是“预期的”null或空字符串。当你尝试这样的事情时,你可以看到这个:

$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连接意外打开/关闭?

© www.soinside.com 2019 - 2024. All rights reserved.