Sql server 2008 不存在objecttype:Arraylist到本机类型的映射

Sql server 2008 不存在objecttype:Arraylist到本机类型的映射,sql-server-2008,powershell,arraylist,Sql Server 2008,Powershell,Arraylist,我有一个arraylist,其中填充了来自cmdlet(来自BEMCLI模块)的数据,并希望将数据存储在数据库中。声明每一列只是为了指定错误 有一些关于类似错误代码的问题,但我不知道如何让解决方案为我工作 错误代码: 感谢Richard给出了正确的提示。 集合导致问题(AgentServer和AgentServerIdList) 我修复了上面的代码,在循环中添加了$SqlCmd.Parameters.Clear(),以清除每个循环中的参数。类似于“不能两次声明@Variable” 命令行给了我另

我有一个arraylist,其中填充了来自cmdlet(来自BEMCLI模块)的数据,并希望将数据存储在数据库中。声明每一列只是为了指定错误

有一些关于类似错误代码的问题,但我不知道如何让解决方案为我工作

错误代码:
感谢Richard给出了正确的提示。 集合导致问题(
AgentServer
AgentServerIdList

我修复了上面的代码,在循环中添加了
$SqlCmd.Parameters.Clear()
,以清除每个循环中的参数。类似于“
不能两次声明@Variable

命令行给了我另一个错误-所以我决定切换到
.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()
}

感谢Richard给出了正确的提示。 集合导致问题(
AgentServer
AgentServerIdList

我修复了上面的代码,在循环中添加了
$SqlCmd.Parameters.Clear()
,以清除每个循环中的参数。类似于“
不能两次声明@Variable

命令行给了我另一个错误-所以我决定切换到
.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()
}

1.格式怎么了?2.您传递给查询参数的值之一可能是一个集合(无法区分代码中的哪个值,但
AgentServerIdList
看起来可疑)。1。很抱歉。我排除了集合,出现了另一个错误,因为我在每个循环中声明了参数。我会尽快解决这个问题,并希望能报告解决方案。1。格式怎么了?2.您传递给查询参数的值之一可能是一个集合(无法区分代码中的哪个值,但
AgentServerIdList
看起来可疑)。1。很抱歉。我排除了集合,出现了另一个错误,因为我在每个循环中声明了参数。我会尽快解决这个问题,并希望能报告一个解决方案。