2013-09-26 1 views
0

Oracle 삽입을위한 매개 변수의 해시 테이블을 전달 중입니다. 해시 테이블 값의 내용은 배열입니다. 계속이 오류가 발생합니다.오류를 해결하는 방법 : 예외 설정 "값": "값이 예상 범위 내에 들지 않습니다." in powershell script

Exception setting "Value": "Value does not fall within the expected range." 

배열 바인딩을 사용하여 값을 추가하려고 할 때. 유효한 명령 개체가 있고 ArrayBindCount를 올바른 값으로 설정합니다. 여기 내가 사용하고있는 코드와 출력. 이 작동합니다!

Value of $cmdObject.CommandText = insert into regions (region_id, region_name) values (:REGION_ID, :REGION_NAME) 
ParameterName = "REGION_NAME" type = System.String Parameter Value Type = System.String[] Count = 4 
    Exception setting "Value": "Value does not fall within the expected range." 
    At C:\Users\areum\Downloads\wd\Scratch\HelloPSWorld_functions.ps1:1615 char:4 
    + $oraParam.Value = $p.Value 
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     + CategoryInfo   : NotSpecified: (:) [], SetValueInvocationException 
     + FullyQualifiedErrorId : ExceptionWhenSetting 

    ParameterName = "REGION_ID" type = System.String Parameter Value Type = System.Int32[] Count = 4 
    Exception setting "Value": "Value does not fall within the expected range." 
    At C:\Users\areum\Downloads\wd\Scratch\HelloPSWorld_functions.ps1:1615 char:4 
    + $oraParam.Value = $p.Value 
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     + CategoryInfo   : NotSpecified: (:) [], SetValueInvocationException 
     + FullyQualifiedErrorId : ExceptionWhenSetting 

    Number of parameters in $cmdObject.Parameters = 2 
    Value of $cmdObject.ArrayBindCount = 4 

난 그냥이 동작하지 않습니다 :

$cmdObject = New-Object Oracle.DataAccess.Client.OracleCommand($sqlStatement,$connectionObject) 
$cmdObject.BindByName = $true 

if($parameterValues) 
{ 
    ForEach($p in $parameterValues.GetEnumerator()) 
    { 
    $cmdObject.ArrayBindCount = $p.Value.Count 
    Write-Host ("ParameterName = ""{0}"" type = {1} Parameter Value Type = {2} Count = {3}" -f $p.Key, $p.Key.GetType().FullName, $p.Value.GetType().FullName, $p.Value.Count) 
    $oraParam = New-Object Oracle.DataAccess.Client.OracleParameter 
    $oraParam.ParameterName = $p.Key 
    $oraParam.Value = $p.Value 
    $cmdObject.Parameters.Add($oraParam) | Out-Null 
    } 

    Write-Host("Number of parameters in `$cmdObject.Parameters = {0}" -f $cmdObject.Parameters.Count) 

Write-Host ("Value of `$cmdObject.ArrayBindCount = {0}" -f $cmdObject.ArrayBindCount) 

여기에 내가 무엇입니까 출력과 오류는 다음 $ parameterValues ​​변수 내가 전달하고 내 해시 테이블이 포함되어 있습니다! 도와주세요!

답변

0

예외는 Oracle에서 발생합니다. 문자열이 아닌 int 만 제공 할 수있는 것처럼 보입니다. 값이 int로 바뀔 수있는 문자열이면 [int] $ p.Value를 사용하십시오. 그렇지 않으면 오래된 학교 enum (숫자가 아니라 적절한 구조) 일 수 있습니다. 그렇다면 해당 열거 형을 int로 직접 변환 (온라인에서 특정 문자열을 검색해보십시오. 실제 값에 대한 설명서를 찾아야합니다).

이야기의 교훈은 다음과 같습니다 당신이 PowerShell의 예외를 볼 때

것은, 그것에주의를 기울입니다. PowerShell 레이어에서 나오는 경우는 드뭅니다. 일반적으로 .NET 바로 아래에 있습니다.

+0

의견을 보내 주셔서 감사합니다. 나는이 제안을 시도하고 그것이 효과가 있는지 확인합니다. 제 질문에 답할 시간을 내 주셔서 감사합니다. 귀하의 제안을 테스트 한 후에 나는 더 많은 피드백을 게시 할 것입니다. – user2687667

관련 문제