2012-10-17 24 views
12

Tôi cần đầu vào của bạn về cách chuyển đổi đầu ra từ truy vấn SQL thành một chuỗi trong PowerShell. Tôi hiện đang làm như sauPowershell - Parse System.Data.DataRow thành chuỗi

function ExecuteFromScriptRowset($connectionParams, $file) 
{ 
    return (invoke-sqlcmd @connectionParams 
      -inputFile $file -MaxCharLength 8000000) 
} 

Tôi sử dụng chức năng ở trên để gọi một file sql mà không một cái gì đó giống như

SELECT Names FROM tblXXX 

Đây là đoạn mã PowerShell thực tế mà tôi sử dụng để gọi SQL được lưu trữ proc

$output = ExecuteFromScriptRowset $someDB (Resolve-Path '.\selectXXX.sql') 

Đầu ra là một mảng System.Data.DataRow mà tôi cần chuyển đổi thành mảng chuỗi. Tôi hiện đang thử những điều sau đây mà không hoạt động như dự định

$formatOut = @() 

for ($i=0; $i -le $output.Length; $i++) 
{ 
    $formatOut = $formatOut + [string]$output[$i] 
} 

Dưới đây là đầu ra của $ formatOut là sau khi vòng lặp for và đây không phải là những gì tôi đang tìm kiếm

$formatOut[0] = System.Data.DataRow 
$formatOut[1] = System.Data.DataRow 
$formatOut[2] = System.Data.DataRow 

thể bạn hãy cho tôi biết những gì tôi cần làm để tạo một mảng chuỗi nội dung của đối tượng $

Trả lời

19

Những gì bạn thấy là hoàn toàn bình thường, vì theo mặc định ToString sẽ xuất loại đối tượng. Đây là thông số kỹ thuật .NET.

Bạn có thể chuyển đổi một DataRow đến mảng các đối tượng sử dụng ItemArray, và sau đó tham gia qua "" hoặc bất cứ tham gia phương pháp mà bạn thích, như thế này:

$formatOut = $formatOut + ($output[$i].ItemArray -join ",")