我需要做的是:
1,从sql server datatable中查询一行xml。请参见下面的图片,名为StageDesc
内容的行xml文件。
2,xml文件包含了我需要获取的路径//sharespace/test1/10.0.1212.0
,这在xml文件中形成为<releasepath>//sharespace/test1/10.0.1212.0</releasepath>
。
以下是我的代码尝试获取它:
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlQuery = "SELECT Stage.Description as StageDesc,Stage.StageStatusId FROM [Build].[dbo].[WorkflowInstance_View] as Build
join [Build].[dbo].[Stage_View] as Stage on Build.Id=Stage.[WorkflowInstanceId] where Stage.ParentId is null and Stage.StageStatusId <>4 and Stage.StageStatusId <>7 order by Build.Id desc"
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $Connection
$DBResult = $sqlcmd.ExecuteReader()
$DataTable = New-Object system.data.datatable
$DataTable.load($DBResult)
foreach ($StageDesc in $DataTable) {
[XML]$ReturnedXML=$StageDesc.releasepath
}
代码已通过但未返回任何内容。为什么会这样?有人愿意帮助我吗?
答案 0 :(得分:2)
您将xml数据分配给变量$ RetrunedXML,并在foreach的每次迭代时覆盖赋值。你检查了$ ReturnedXML吗?
使用SQL Server 2008的示例数据库,我可以使用:
$serverName = "$env:computername\sql1"
$databaseName = "AdventureWorks"
$query = "SELECT * from Person.Contact where AdditionalContactInfo IS NOT NULL"
$conn=new-object System.Data.SqlClient.SQLConnection
$connString = “Server=$serverName;Database=$databaseName;Integrated Security=SSPI;”
$conn.ConnectionString=$connString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$da = New-Object “System.Data.SqlClient.SqlDataAdapter” ($cmd)
$dt = New-Object “System.Data.DataTable”
$da.fill($dt) | out-null
$conn.Close()
$dt | foreach {[xml]$ReturnedXML = $_.AdditionalContactInfo; $ReturnedXML}
答案 1 :(得分:0)
您在代码中所做的只是声明和分配变量。没有输出或显示任何内容的代码。你也没有返回任何变量。那么你期望代码应该返回什么?在哪一行?你有没有尝试调试代码?
答案 2 :(得分:0)
$da.fill($dt)
将查询结果加载到DataTable $ dt。
$dt | Out-GridView
显示所有数据。
这个脚本对我很有用(除了最后一行,它不适用于我的情况)。