我有以下 PS 功能:
function GetBuildData {
[System.Data.SqlClient.SqlConnection] $conn = New-Object System.Data.SqlClient.SqlConnection
[System.Data.SqlClient.SqlCommand] $cmd = New-Object System.Data.SqlClient.SqlCommand
[System.Data.SqlClient.SqlDataAdapter] $adapter = New-Object System.Data.SqlClient.SqlDataAdapter
[System.Data.DataTable] $dt = New-Object System.Data.DataTable
try {
[string] $connStr = "myConnectionString"
$conn.ConnectionString = $connStr
$cmd.Connection = $conn
$cmd.CommandText = "SELECT * FROM TestTable"
$conn.Open
$adapter.SelectCommand = $cmd
$adapter.Fill($dt)
$conn.Close
}
catch [system.exception]
{
Write-Host $_
}
finally {
$adapter.Dispose
$cmd.Dispose
$conn.Dispose
}
return $dt
}
为简洁起见,大部分功能已被删除。我遇到的问题是当我像这样调用函数时:
[System.Data.DataTable] $buildData = GetBuildData
我收到以下错误:
无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Data.DataTable”类型。
为什么当很明显 $dt 变量是 DataTable 时,Powershell 认为我想要返回一个 object[] 数组?
编辑:
我已经仔细检查过,$dt
确实包含数据。例如,Rows.Count 的数量是预期的 1。