2012-12-14 2 views
1

저장 프로 시저를 실행하는 데 사용할 사용자 입력을 허용하는 powershell 스크립트가 있습니다. sproc은 여러 매개 변수를 받아 들여 반환되는 데이터를 사용자 정의합니다.Powershell에서 저장 프로 시저를 실행하는 중 오류가 발생했습니다.

Cannot index into a null array. 
At C:\Report.ps1:119 char:42 
+  foreach ($Row in $global:DataSet.Tables[ <<<< 0].Rows) 
+ CategoryInfo   : InvalidOperation: (0:Int32) [], RuntimeException 
+ FullyQualifiedErrorId : NullArray 

이 내가 저장 프로 시저에 대한 호출을 실행하는 데 사용하고 파워 쉘 코드는 :이 파워 쉘 코드를 실행할 때, 나는 다음과 같은 오류가 발생합니다.

# Create Shared Helper Objects 
$nl = [Environment]::NewLine 

function msg 
{ 
    param($message,$fgcolor="white",$bgcolor="black") 
    $output = Write-Host $message -ForegroundColor $fgcolor -BackgroundColor $bgcolor 
    write-output $output 
} 
Set-Location "C:\" 

$month = Read-Host "Enter Report Month" 
$year = Read-Host "Enter Report Year" 
msg "$nl Choose a product" "White" 
$prompt = ' [D] Desktop [M] Mobile' 
switch (Read-Host $prompt) { 
"D" {$product = "Desktop"; break} 
"M" {$product = "Mobile"; break} 
} 
msg "$nl Select a Make" "White" 
$prompt = ' [F] First [L] Last ' 
switch (Read-Host $prompt) { 
"F" {$SiteMake = "First"; break} 
"L" {$SiteMake = "Last"; break} 
} 
msg "$nl Select a Product" "White" 
$prompt = ' [E] Extra [B] Basic' 
switch (Read-Host $prompt) { 
"E" {$SitePackage = "Extra"; break} 
"B" {$SitePackage = "Basic"; break} 
} 

# Create Database Connection Function 
function ConnectSproc 
{ 
param ($SQLServer, $SQLDBName, $SqlQuery) 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure 
    # Report Month 
    $SqlCmd.Parameters.Add("@ReportMonth",[system.data.SqlDbType]::VarChar) | out-Null 
    $SqlCmd.Parameters["@ReportMonth"].Direction = [system.data.ParameterDirection]::Input 
    $SqlCmd.Parameters["@ReportMonth"].value = $month 
    # Report Year 
    $SqlCmd.Parameters.Add("@ReportYear",[system.data.SqlDbType]::VarChar) | out-Null 
    $SqlCmd.Parameters["@ReportYear"].Direction = [system.data.ParameterDirection]::Input 
    $SqlCmd.Parameters["@ReportYear"].value = $year 
    # Product 
    $SqlCmd.Parameters.Add("@Product",[system.data.SqlDbType]::VarChar) | out-Null 
    $SqlCmd.Parameters["@Product"].Direction = [system.data.ParameterDirection]::Input 
    $SqlCmd.Parameters["@Product"].value = $product 
    # Site Make 
    $SqlCmd.Parameters.Add("@SiteMake",[system.data.SqlDbType]::VarChar) | out-Null 
    $SqlCmd.Parameters["@SiteMake"].Direction = [system.data.ParameterDirection]::Input 
    $SqlCmd.Parameters["@SiteMake"].value = $SiteMake 
    # Site Package 
    $SqlCmd.Parameters.Add("@SitePackage",[system.data.SqlDbType]::VarChar) | out-Null 
    $SqlCmd.Parameters["@SitePackage"].Direction = [system.data.ParameterDirection]::Input 
    $SqlCmd.Parameters["@SitePackage"].value = $SitePackage 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) | Out-Null 
$SqlConnection.Close() 
$DataSet.Tables[0] 
} 

ConnectSproc "servername" "databasename" "mysproc" 

나는 손실에 있어요. 어떤 도움을 주시면 감사하겠습니다!

업데이트 : 실제로 절차가 제대로 실행되지 않는 것처럼 보입니다. 아마도 그 오류를 설명 할 것입니다. 이제 sproc이 실행되지 않는 이유를 모르겠습니다.

답변

0

Fill()에 대한 호출에 실패했을 수 있습니다. 잠시 후 | Out_Null 부분의 $SqlAdapter.Fill($DataSet) | Out-Null을 주석 처리하고 그 빛이 없는지 확인합니다.

1

나는 그것을 알아 냈다. "$ 글로벌 :"그것은 $ 데이터 집합중인 변수 함수 내에서 생성로 시작하지와 범위 지정 문제 었죠

이 문제를 해결하려면, 나는 $global:DataSet = New-Object System.Data.DataSet

$DataSet = New-Object System.Data.DataSet 변경 및 $global:DataSet.Tables[0] 외부로 참조 함수.

관련 문제