2009-07-26 13 views
6

में डेटाटेबल बनाएं, सबसे पहले मुझे उन लोगों का धन्यवाद करने दें जिन्होंने मेरे पिछले प्रश्नों का उत्तर दिया। तुम लड़के गजब हो!!!पावरहेल में डेटाटेबल कैसे बनाएं और

यहां मेरा प्रश्न है: मुझे अपने एसक्यूएल सर्वर से पूछताछ की प्रक्रिया करना है और एक डाटाएडर वापस करना पसंद है। हालांकि मैं इसके बाहर एक टेबल बनाना चाहता हूं। वह तालिका मैं नए पावरहेल ओपनएक्सएमएल कमांडलेट का उपयोग करके एक्सेल लोड करने के लिए उपयोग करूंगा। जब मैं डेटाटेबल बनाने की कोशिश करता हूं तो कोड विफल हो जाता है। मुझे नहीं लगता कि मैं नई ऑब्जेक्ट "सिस्टम। ऑब्जेक्ट []" सही ढंग से दर्ज कर रहा हूं।

$sqlConnection = new-object System.Data.SqlClient.SqlConnection "server=localhost;database=Demo;Integrated Security=sspi" 
$sqlConnection.Open() 

#Create a command object 
$sqlCommand = $sqlConnection.CreateCommand() 
$sqlCommand.CommandText = "EXEC Demo.usp_GetTableValueParameter_Data" 

#Execute the Command 
$sqlReader = $sqlCommand.ExecuteReader() 

#Parse the records 

$sqlReader | &{ begin{$values = new-object "System.Object[]" $sqlReader["Name"], $sqlReader["Level_Desc"], $sqlReader["Level"]} process {$_.GetValues($values); $datatable.Rows.Add($values)}} 

##$datatable | format-table -autosize 

# Close the database connection 
$sqlConnection.Close() 

#STARTING OPENXML PROCESS 
#---------------------------- 
$xlsFile = "C:\Temp\Data.xlsx" 
$datatable | Export-OpenXmlSpreadSheet -OutputPath $xlsFile -InitialRow 3 

उत्तर

3

मैं कैसे powershell में लेकिन में यह करने के लिए कोई सुराग नहीं है .net आप इसे इस प्रकार कार्य करें::

DataTable dt = new DataTable(); 
dt.Load(yourSqlReader); 
+1

बस सही जगहों पर डॉलर के संकेत ($) जोड़ें :-) – onupdatecascade

15

PowerShell में Mladen's answer का अनुवाद सीधे आगे बहुत है यहाँ मैं अब तक क्या मिला है :

$sqlConnection = new-object System.Data.SqlClient.SqlConnection "server=localhost;database=Demo;Integrated Security=sspi" 
$sqlConnection.Open() 

#Create a command object 
$sqlCommand = $sqlConnection.CreateCommand() 
$sqlCommand.CommandText = "EXEC Demo.usp_GetTableValueParameter_Data" 

#Execute the Command 
$sqlReader = $sqlCommand.ExecuteReader() 

$Datatable = New-Object System.Data.DataTable 
$DataTable.Load($SqlReader) 

# Close the database connection 
$sqlConnection.Close() 

#STARTING OPENXML PROCESS 
#---------------------------- 
$xlsFile = "C:\Temp\Data.xlsx" 
$datatable | Export-OpenXmlSpreadSheet -OutputPath $xlsFile -InitialRow 3 

हालांकि, अगर आप सिर्फ एक DataTable वापस की जरूरत है, तो आप आदेश पर ExecuteReader कॉल करने के लिए, आप एक DataAdapter बना सकते हैं कि का उपयोग DataTable भरने की जरूरत नहीं है और:

$sqlConnection = new-object System.Data.SqlClient.SqlConnection "server=localhost;database=Demo;Integrated Security=sspi" 
$sqlConnection.Open() 

#Create a command object 
$sqlCommand = $sqlConnection.CreateCommand() 
$sqlCommand.CommandText = "EXEC Demo.usp_GetTableValueParameter_Data" 

$adapter = New-Object System.Data.SqlClient.SqlDataAdapter $sqlcommand 
$dataset = New-Object System.Data.DataSet 

$adapter.Fill($dataSet) | out-null 

# Close the database connection 
$sqlConnection.Close() 

$datatable = $dataset.Tables[0] 

#STARTING OPENXML PROCESS 
#---------------------------- 
$xlsFile = "C:\Temp\Data.xlsx" 
$datatable | Export-OpenXmlSpreadSheet -OutputPath $xlsFile -InitialRow 3 
संबंधित मुद्दे