2017-08-21 10 views
1

(BEMCLIモジュールの)コマンドレットのデータが入っているarraylistがあり、そのデータをデータベースに格納します。すべての列を宣言すると、エラーを指定するだけです。マッピングが存在しませんobjecttype:Arraylist to native型

同様のエラーコードについてはいくつか質問がありますが、解決方法を知る方法はわかりません。

のerrorCode:

 
No mapping exists from object type System.Data.Arraylist to a known managed 
provider native type 
In C:\**\test.ps1:68 Zeichen:1 
+ $SqlCmd.executenonquery() 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ArgumentException 

スクリプト:右のヒントを与えるリチャードへ

$JobHistory = Invoke-Command -ComputerName $ServerName -ScriptBlock { 
    Import-Module BEMCLI; 
    Get-BEJobHistory -FromStartTime (Get-Date).AddDays(-1) 
} 

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;" 
$SqlConnection.Open() 

for ($i=0; $i -lt $JobHistory.Length; $i++) { 
    $SqlCmd.Parameters.Add("@Name", [System.Data.SqlDbType]::string).Value = $JobHistory[$i].Name 
    $SqlCmd.Parameters.Add("@ID", [System.Data.SqlDbType]::UniqueIdentifier).Value = $JobHistory[$i].ID 
    $SqlCmd.Parameters.Add("@JobName", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].JobName 
    $SqlCmd.Parameters.Add("@JobStatus", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].JobStatus 
    $SqlCmd.Parameters.Add("@Job", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].Job 
    $SqlCmd.Parameters.Add("@JobId", [System.Data.SqlDbType]::UniqueIdentifier).Value = $JobHistory[$i].JobId 
    $SqlCmd.Parameters.Add("@JobType", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].JobType 
    $SqlCmd.Parameters.Add("@StartTime", [System.Data.SqlDbType]::DateTime).Value = $JobHistory[$i].StartTime 
    $SqlCmd.Parameters.Add("@ElapsedTime", [System.Data.SqlDbType]::TimeSpan).Value = $JobHistory[$i].ElapsedTime 
    $SqlCmd.Parameters.Add("@EndTime", [System.Data.SqlDbType]::DateTime).Value = $JobHistory[$i].EndTime 
    $SqlCmd.Parameters.Add("@PercentComplete", [System.Data.SqlDbType]::Real).Value = $JobHistory[$i].PercentComplete 
    $SqlCmd.Parameters.Add("@AgentServer", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].AgentServer 
    $SqlCmd.Parameters.Add("@AgentServerIdList", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].AgentServerIdList 
    $SqlCmd.Parameters.Add("@BackupExecServerName", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].JobLogFilePath 
    $SqlCmd.Parameters.Add("@JobLogFilePath", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].JobLogFilePath 
    $SqlCmd.Parameters.Add("@DeduplicationRatio", [System.Data.SqlDbType]::Real).Value = $JobHistory[$i].DeduplicationRatio 
    $SqlCmd.Parameters.Add("@JobRateMBPerMinute", [System.Data.SqlDbType]::Real).Value = $JobHistory[$i].JobRateMBPerMinute 
    $SqlCmd.Parameters.Add("@StorageName", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].StorageName 
    $SqlCmd.Parameters.Add("@TotalDataSizeBytes", [System.Data.SqlDbType]::BigInt).Value = $JobHistory[$i].TotalDataSizeBytes 
    $SqlCmd.Parameters.Add("@ErrorCategory", [System.Data.SqlDbType]::Int).Value = $JobHistory[$i].ErrorCategory 
    $SqlCmd.Parameters.Add("@ErrorCode", [System.Data.SqlDbType]::Int).Value = $JobHistory[$i].ErrorCode 
    $SqlCmd.Parameters.Add("@ErrorCategory", [System.Data.SqlDbType]::String).Value = $JobHistory[$i].ErrorCategory 
    $SqlCmd.Parameters.Add("@ErrorMessage", [System.Data.SqlDbType]::Int).Value = $JobHistory[$i].ErrorMessage 

    $SqlQuery = "INSERT INTO JobHistory(Nr,Name,ID,JobName,JobStatus,Job,JobId,JobType,StartTime,ElapsedTime,EndTime,PercentComplete,AgentServer,AgentServerIdList,BackupExecServerName,JobLogFilePath,DeduplicationRatio,JobRateMBPerMinute,StorageName,TotalDataSizeBytes,ErrorCategory,ErrorCode,ErrorCategory,ErrorMessage) VALUES (@Nr,@Name,@ID,@JobName,@JobStatus,@Job,@JobId,@JobType,@StartTime,@ElapsedTime,@EndTime,@PercentComplete,@AgentServer,@AgentServerIdList,@BackupExecServerName,@JobLogFilePath,@DeduplicationRatio,@JobRateMBPerMinute,@StorageName,@TotalDataSizeBytes,@ErrorCategory,@ErrorCode,@ErrorCategory,@ErrorMessage)" 

    $SqlCmd.CommandText = $SqlQuery 
    $SqlCmd.Connection = $SqlConnection 

    $SqlCmd.ExecuteNonQuery() 
} 
+2

1.フォーマットは何ですか? 2.クエリパラメータに渡す値の1つがコレクションです(どちらがコードかはわかりませんが、 'AgentServerIdList'は疑わしいと思われます)。 – Richard

+0

1.それについて申し訳ありません2.私はコレクションを除外し、別のエラーが表示されます - 私はすべてのループでパラメータを宣言します。 私はすぐにこの問題を解決し、うまくいけば解決策を報告しようとします。 –

答えて

0

感謝。 コレクションは問題(AgentServerAgentServerIdList

を引き起こす私はすべてのループのパラメータをクリアするためにループ内$SqlCmd.Parameters.Clear()を追加、上記のコードを修正しました。それは 'cannot declare @Variable twice'のようなものでした。

コマンドラインに別のエラーが表示されたので、私は.Parameters.AddWithValueコマンドに切り替えました。

スクリプトは正常に機能しています。ありがとうございました!

$JobHistory = invoke-command -ComputerName $ServerName -ScriptBlock { import-module BEMCLI; Get-BEJobHistory -FromStartTime (get-date).AddDays(-1) } 

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;" 
$SqlCmd.Connection = $SqlConnection 
$SqlConnection.Open() 

for($i=0; $i -lt $JobHistory.Length; $i++){ 

$SqlCmd.Parameters.Clear() 

$SqlCmd.Parameters.AddWithValue("@Nr", $JobHistory[$i].Nr) 
$SqlCmd.Parameters.AddWithValue("@Name",$JobHistory[$i].Name) 
$SqlCmd.Parameters.AddWithValue("@ID", $JobHistory[$i].ID) 
$SqlCmd.Parameters.AddWithValue("@JobName", $JobHistory[$i].JobName) 
$SqlCmd.Parameters.AddWithValue("@JobStatus", $JobHistory[$i].JobStatus) 
$SqlCmd.Parameters.AddWithValue("@Job", $JobHistory[$i].Job) 
$SqlCmd.Parameters.AddWithValue("@JobId", $JobHistory[$i].JobId) 
$SqlCmd.Parameters.AddWithValue("@JobType", $JobHistory[$i].JobType) 
$SqlCmd.Parameters.AddWithValue("@StartTime", $JobHistory[$i].StartTime) 
$SqlCmd.Parameters.AddWithValue("@ElapsedTime", $JobHistory[$i].ElapsedTime) 
$SqlCmd.Parameters.AddWithValue("@EndTime", $JobHistory[$i].EndTime) 
$SqlCmd.Parameters.AddWithValue("@PercentComplete", $JobHistory[$i].PercentComplete) 
$SqlCmd.Parameters.AddWithValue("@BackupExecServerName", $JobHistory[$i].BackupExecServerName) 
$SqlCmd.Parameters.AddWithValue("@JobLogFilePath", $JobHistory[$i].JobLogFilePath) 
$SqlCmd.Parameters.AddWithValue("@DeduplicationRatio", $JobHistory[$i].DeduplicationRatio) 
$SqlCmd.Parameters.AddWithValue("@JobRateMBPerMinute", $JobHistory[$i].JobRateMBPerMinute) 
$SqlCmd.Parameters.AddWithValue("@StorageName", $JobHistory[$i].StorageName) 
$SqlCmd.Parameters.AddWithValue("@TotalDataSizeBytes", $JobHistory[$i].TotalDataSizeBytes)    
$SqlCmd.Parameters.AddWithValue("@ErrorCode", $JobHistory[$i].ErrorCode) 
$SqlCmd.Parameters.AddWithValue("@ErrorCategory", $JobHistory[$i].ErrorCategory) 
$SqlCmd.Parameters.AddWithValue("@ErrorCategoryType", $JobHistory[$i].ErrorCategoryType) 
$SqlCmd.Parameters.AddWithValue("@ErrorMessage", $ValueForJobHistory[$i].ErrorMessage) 
$SqlQuery = "Insert into JobHistory(Nr,Name,ID,JobName,JobStatus,Job,JobId,JobType,StartTime,ElapsedTime,EndTime,PercentComplete,BackupExecServerName,JobLogFilePath,DeduplicationRatio,JobRateMBPerMinute,StorageName,TotalDataSizeBytes,ErrorCode,ErrorCategory,ErrorCategoryType) Values(@Nr,@Name,@ID,@JobName,@JobStatus,@Job,@JobId,@JobType,@StartTime,@ElapsedTime,@EndTime,@PercentComplete,@BackupExecServerName,@JobLogFilePath,@DeduplicationRatio,@JobRateMBPerMinute,@StorageName,@TotalDataSizeBytes,@ErrorCode,@ErrorCategoryType,@ErrorCategory)" 

$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.executenonquery() 
} 
関連する問題