2017-08-14 85 views
0

我從PowerShell運行SQL查詢。我可以正確地獲取行數據和列數,但是我需要從查詢中生成的sql表中收集列的名稱。例如,如果我的表是這樣的:從PowerShell獲取列的名稱sql查詢

Column1 Column2 
1 |row1Item1 |row1Item2 | 
2 |row2Item1 |row2Item2 | 
3 |row3Item1 |row3Item2 | 

然後,我需要的值是「列1」,「列2」。我下面的代碼會告訴我有2列,但我不知道如何獲取這些列的名稱。

$cmd = new-object System.Data.SqlClient.SqlCommand($sqlquery, $connection) 
$connection.Open() 
$reader = $cmd.ExecuteReader() 
$reader.FieldCount #returns the number of columns --> 2 
+0

,你應該已經知道列的返回。因爲sql語句的語法是從[table_name]中選擇[column_name]。 –

+0

如果sql查詢與'select * from table'類似,則不行。如果我以這種方式編寫查詢,那麼在生成結果表之前,我並不知道列名。我需要PowerShell才能夠獲得列名。 – CuriousOne

+0

select *將返回表中的所有列。所以你仍然知道你正在返回的列。您使用的表是永久表還是臨時表? –

回答

1

使用SqlDataAdapter.Fill()而不是讀者。這樣你可以有腳本填充DataTable對象將保留列名:

$cmd = new-object System.Data.SqlClient.SqlCommand($sqlquery, $SqlConnection) 
$SqlConnection.Open() 

# Create adapter, associate with command 
$Adapter = [System.Data.SqlClient.SqlDataAdapter]::new($cmd) 

# Create empty DataTable 
$DataTable = New-Object System.Data.DataTable 

# Fill datatable based on query 
$Adapter.Fill($DataTable) 

$DataTable.Rows[0] # returns a DataRow object with correct column names 
在SQL查詢
+0

好吧,所以從你離開的地方,我添加了行:'$ DataTable.Coulmns [0] .ColumnName'從表中返回「Column1」。感謝您的幫助。 – CuriousOne

0

嘗試找

$table = New-Object System.Data.DataTable 

類似的東西在C#中的訪問,你從查詢得到更好的表。

希望它有幫助!

編輯: 在C#中的這樣

SqlConnection conn = new SqlConnection(ConnectionString); 

SqlDataAdapter da = new SqlDataAdapter(); 

SqlCommand cmd = conn.CreateCommand(); 

cmd.CommandText = SQL; 

da.SelectCommand = cmd; 

DataSet ds = new DataSet(); 

conn.Open(); 

da.Fill(ds); 
conn.Close();return ds; 
+0

這是如何使用的? – CuriousOne

+0

@CuriousOne我編輯後 –