Powershell 单行数据表 return 填充组合框
Powershell Single row datatable return to fill combobox
我正在使用 Powershell v4.0。我在我的 UI 上有一个下拉菜单,我正在用我的数据库中的数据填充它。我调用了一个像这样获取数据的函数:
$ConfigDynamicContractID.ItemsSource = (GetDynamicContracts).DefaultView
在后端看起来像这样:
function GetDynamicContracts{
$ContractQuery = "select con.ContractNumber as Name, c.ContractID from foo..campaign c inner join foo..campaigntemplate ct on c.campaignid = ct.campaignid
inner join foo..template t on ct.templateid = t.templateid inner join bar..contracts con on con.ContractID = c.ContractID
where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$ContractResult = ExecuteSelect "Bar" $ContractQuery
return , $ContractResult
}
这段代码工作正常。然后我被告知上面引用的表不能相互通信,所以我必须对每个表进行单独调用并在 powershell 中进行过滤。所以这是我的代码:
function GetDynamicContracts{
$CampaignQuery = "Select c.* From foo..Campaign c join foo..CampaignTemplate ct on c.CampaignID = ct.CampaignID
join foo..Template t on ct.TemplateID = t.TemplateID
Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$CampaignResults = ExecuteSelect "foo" $CampaignQuery
$ContractIDs = New-Object System.Collections.ArrayList
foreach($row in $CampaignResults.Rows){
$ContractIDs.Add($row.ContractID)
}
$ContractIDs = $ContractIDs -join ","
$PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)"
$PHResults = ExecuteSelect "Bar" $PHQuery
#Log $MyInvocation.MyCommand $PSBoundParameters
return ,$PHResults
}
由于某种原因,此代码在返回单行时不起作用。但是如果我把这个函数调用分成两个独立的部分,那么它就可以工作了。见下文:
function GetDynamicContracts{
$ContractIDs = GetDynamicCampaign
$ContractIDs = $ContractIDs[1]
$PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)"
$PHResults = ExecuteSelect "PhytelMaster" $PHQuery
Log $MyInvocation.MyCommand $PSBoundParameters
return ,$PHResults
}
function GetDynamicCampaign{
$CampaignQuery = "Select c.* From Campaign..Campaign c join Campaign..CampaignTemplate ct on c.CampaignID = ct.CampaignID
join Campaign..Template t on ct.TemplateID = t.TemplateID
Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$CampaignResults = ExecuteSelect "Campaign" $CampaignQuery
$ContractIDs = New-Object System.Collections.ArrayList
foreach($row in $CampaignResults.Rows){
$ContractIDs.Add($row.ContractID)
}
$ContractIDs = $ContractIDs -join ","
return $ContractIDs
}
似乎在单个函数中进行两次执行选择会导致“,”在返回数据时无法执行其操作。谁能解释为什么??提前致谢,因为我有解决方法,所以不用着急。
正如@TheMadTechnician 和@wOxxOm 指出的那样,ArrayList 将索引垃圾邮件发送到 return 和 return,returns 函数中的所有垃圾邮件。因此,当我期望 $PHResults 时,我也收到了 ArrayList 垃圾邮件。我可以使用 ArrayList 以外的其他东西,或者我还发现,如果我将我的函数代码包装在 $null = @{ 'Code' }
中,然后 return 我想要的变量,我得到的只是那个变量。它很丑,但它有效。
我正在使用 Powershell v4.0。我在我的 UI 上有一个下拉菜单,我正在用我的数据库中的数据填充它。我调用了一个像这样获取数据的函数:
$ConfigDynamicContractID.ItemsSource = (GetDynamicContracts).DefaultView
在后端看起来像这样:
function GetDynamicContracts{
$ContractQuery = "select con.ContractNumber as Name, c.ContractID from foo..campaign c inner join foo..campaigntemplate ct on c.campaignid = ct.campaignid
inner join foo..template t on ct.templateid = t.templateid inner join bar..contracts con on con.ContractID = c.ContractID
where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$ContractResult = ExecuteSelect "Bar" $ContractQuery
return , $ContractResult
}
这段代码工作正常。然后我被告知上面引用的表不能相互通信,所以我必须对每个表进行单独调用并在 powershell 中进行过滤。所以这是我的代码:
function GetDynamicContracts{
$CampaignQuery = "Select c.* From foo..Campaign c join foo..CampaignTemplate ct on c.CampaignID = ct.CampaignID
join foo..Template t on ct.TemplateID = t.TemplateID
Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$CampaignResults = ExecuteSelect "foo" $CampaignQuery
$ContractIDs = New-Object System.Collections.ArrayList
foreach($row in $CampaignResults.Rows){
$ContractIDs.Add($row.ContractID)
}
$ContractIDs = $ContractIDs -join ","
$PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)"
$PHResults = ExecuteSelect "Bar" $PHQuery
#Log $MyInvocation.MyCommand $PSBoundParameters
return ,$PHResults
}
由于某种原因,此代码在返回单行时不起作用。但是如果我把这个函数调用分成两个独立的部分,那么它就可以工作了。见下文:
function GetDynamicContracts{
$ContractIDs = GetDynamicCampaign
$ContractIDs = $ContractIDs[1]
$PHQuery = "Select ContractID, ContractNumber as Name From Contracts Where ContractID in ($ContractIDs)"
$PHResults = ExecuteSelect "PhytelMaster" $PHQuery
Log $MyInvocation.MyCommand $PSBoundParameters
return ,$PHResults
}
function GetDynamicCampaign{
$CampaignQuery = "Select c.* From Campaign..Campaign c join Campaign..CampaignTemplate ct on c.CampaignID = ct.CampaignID
join Campaign..Template t on ct.TemplateID = t.TemplateID
Where c.ProductType = 'INTRO' and t.FileName = 'Intro Dynamic Template' and c.DeleteFlag = 0"
$CampaignResults = ExecuteSelect "Campaign" $CampaignQuery
$ContractIDs = New-Object System.Collections.ArrayList
foreach($row in $CampaignResults.Rows){
$ContractIDs.Add($row.ContractID)
}
$ContractIDs = $ContractIDs -join ","
return $ContractIDs
}
似乎在单个函数中进行两次执行选择会导致“,”在返回数据时无法执行其操作。谁能解释为什么??提前致谢,因为我有解决方法,所以不用着急。
正如@TheMadTechnician 和@wOxxOm 指出的那样,ArrayList 将索引垃圾邮件发送到 return 和 return,returns 函数中的所有垃圾邮件。因此,当我期望 $PHResults 时,我也收到了 ArrayList 垃圾邮件。我可以使用 ArrayList 以外的其他东西,或者我还发现,如果我将我的函数代码包装在 $null = @{ 'Code' }
中,然后 return 我想要的变量,我得到的只是那个变量。它很丑,但它有效。