문제

PowerShell 코드를 작성하여 데이터베이스에 연결하고 여러 행의 데이터를 읽고 Per SqlDataReader를 통해 다시 반환합니다.

이 "C # Way"를 작성하여 내가 어떻게 이것을 작성했을 것인가?

function ExecuteQuery($sql) {
    $connection = new-object system.data.SqlClient.SQLConnection($ConnectionString);
    $connection.Open();

    $cmd = $connection.CreateCommand();
    $cmd.CommandText = $sql;
    $cmd.Connection = $connection    
    $reader = [System.Data.SqlClient.SqlDataReader]$cmd.ExecuteReader()
    return $reader;
}
.

(이 함수의 호출자는 연결 자체를 책임있게 닫아야합니다.)

Typecast가 없으면 System.Data.SqlClient.SqlDataReader의 인스턴스를 얻을 것입니다.이것은 중요한 행을 통해 행을 반복하기를 원하기 때문에 열 이름으로 데이터에 액세스하기 위해 제곱 괄호를 사용하기를 원할 것입니다.

불행히도, not Read 메소드를 포함하는 System.Data.Common.DataRecordInternal의 인스턴스를 되돌릴 수 없으며, 배열 인덱스로 레코드에 액세스 할 수 없게합니다.

내 질문은 PowerShell에서 여러 개의 데이터 행을 읽고 반복 할 수 있습니까?

도움이 되었습니까?

해결책

배열 구성원을 반복하는 데 몇 가지 방법이 있습니다 (귀하의 경우 '데이터 행').첫 번째는 마음에 오는 것입니다 :

ForEach($Record in (ExecuteQuery $CommandString){
    Do Stuff to $Record
}
.

또는 foreach 루프로 파이프 할 수 있습니다 (원하는 경우 아웃 파일과 같이 출력 할 수 있음) :

ExecuteQuery $CommandString | ForEach{Do stuff to $_}
.

또는 더 많은 세분화 된 컨트롤을 원한다면 나는 당신이 루프를 사용할 수 있고 다음과 같은 것을 할 수 있다고 가정합니다.

$Results = ExecuteQuery $CommandString 
For($i=0;$i -le $Results.count;$i++){
    Do stuff to $Results[$i]
}
.

다른 팁

PowerShell은 함수가 반환 할 때 독자를 열거하려고 시도하는 것입니다.PowerShell이 배열에 넣어 혼자 남겨 두어야합니다.

return ,$reader
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top