从sql table处理PSCustomObject中的空值。无法转换对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从sql table处理PSCustomObject中的空值。无法转换对象相关的知识,希望对你有一定的参考价值。

在从SQL中提取数据时,行中的某些列为空。我收到一条异常消息:

使用“1”参数调用“GetString”的异常:“无法将'System.DBNull'类型的对象强制转换为'System.String'。”

我怎么处理这个?它似乎基本上只是移动到下一行,但我需要所有行和所有列。如果该列为null,请确定我,但我确实需要将其设置为空字符串。此数据将用于设置AD中用户的详细信息。当我使用Set-ADUser命令时,即使它是null,我也需要能够使用该变量。我不希望PowerShell不执行Set-ADUser命令,因为特定变量为空。最失败的是supr_username。

我花了很长时间才从Oracle sql表中获取输出,以便我可以将它用于Set-ADUser。我还没有发现任何我想要做的事情。

 [pscustomobject]@{
 Identity = $_.GetString(2)
 Title = $_.GetString(3)
 Department = $_.GetString(4)
 MSC = $_.GetString(5)
 Office_Location = $_.GetString(6)
 Office_Phone = $_.GetString(7)
 Supr_username = $_.GetString(10)
 }
 }````


答案

您可以使用空字符串("")的值初始化自定义对象属性。然后你可以测试列索引(序号)是否包含DBNull并且如果它不是DBNULL则转换为字符串。

$obj = [pscustomobject][ordered]@{Identity = ""
    Title = ""
    Department = ""
    MSC = ""
    Office_Location = ""
    Office_Phone = ""
    Supr_username = ""
    }

$obj.Identity = if (!$_.isDbNull(2)) { $_.GetString(2) }
$obj.Title = if (!$_.isDbNull(3)) { $_.GetString(3) }
$obj.Department = if (!$_.isDbNull(4)) { $_.GetString(4) }
$obj.MSC = if (!$_.isDbNull(5)) { $_.GetString(5) }
$obj.Office_Location = if (!$_.isDbNull(6)) { $_.GetString(6) }
$obj.Office_Phone = if (!$_.isDbNull(7)) { $_.GetString(7) }
$obj.Supr_username = if (!$_.isDbNull(10)) { $_.GetString(10) }

$obj

以上是关于从sql table处理PSCustomObject中的空值。无法转换对象的主要内容,如果未能解决你的问题,请参考以下文章

从0到1Flink的成长之路-Table API& SQL入门案例

从0到1Flink的成长之路-Table API& SQL巩固案例

从0到1Flink的成长之路-Table API& SQL巩固案例

Flink Table和SQL API:为统一批处理和流处理而设计

PL/SQL 在 for 循环中执行即时异常处理

Flink - Table API & SQL 流式概念 -- 动态表 (Dynamic Table)