【问题标题】:How to Loop Datareader and create DataTable in Powershell如何在 Powershell 中循环 Datareader 并创建 DataTable
【发布时间】:2010-11-14 04:02:42
【问题描述】:

首先让我感谢那些回答我之前问题的人。你们太棒了!!!

这是我的问题: 我喜欢查询我的 sql server 存储过程并返回一个数据读取器。但是我想用它创建一个表。我将使用该表使用新的 Powershell OpenXML 命令行开关加载 excel。当我尝试构建 DataTable 时代码失败。我认为我没有正确输入新对象“System.Object []”。这是我到目前为止得到的:

$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

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:

    Mladen's answer 翻译成 PowerShell 非常简单:

    $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
    

    【讨论】:

      【解决方案2】:

      我不知道如何在 powershell 中执行此操作,但在 .net 中您可以这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 1970-01-01
        • 2019-05-07
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多