2011-08-04 65 views
0

我需要做的是: 1,從sql server數據表中查詢一行xml。請參見下面的圖片,行名爲StageDesc內容的xml文件。如何使用PowerShell顯示sql表中的xml內容?

The Row named StageDesc contents xml file

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} 
0
$da.fill($dt)

加載查詢結果到數據表$ DT。

$dt | Out-GridView

顯示所有數據。

腳本對我很好(除了最後一行,它不適用於我的情況)。

+0

謝謝!我會盡快嘗試〜 – pansal