PowerShell에서 여러 데이터 행을 반복합니다
-
26-12-2019 - |
문제
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
.