2017-02-16 41 views
4

我从数据库中提取数据(特别是使用ADO访问)。然后,我准备将可能插入到SQL中的变量通过用两个单引号替换任何现有的单引号。PowerShell替换失败后测试为空

因为来自数据库的值非常可能为空,所以我测试它,并且只有在非空时才会发生替换。我得到它的价值不登记为空时,我测试了一下,但是当我试图替换,我得到的错误

方法调用失败,因为[System.DBNull]不包含名为方法“替换”。

这里的代码
$OldAbstract = $rs.Fields.Item("MetaAbstract").value if($OldAbstract -ne $null) {$OldAbstract = $OldAbstract.Replace("'","''")}

部分拉动值后,我打印出来,它看起来像什么。我测试了它为空,它说它不是。我测试了它的“”,事实并非如此。我甚至检查过它是否是一个空间,事实并非如此。报告的长度为1 ...我对于发生了什么事情感到不知所措。

回答

3

您正在测试错误类型的null - PowerShell/.net null而不是数据库null。试试这个(未经测试):

$OldAbstract = $rs.Fields.Item("MetaAbstract").value 
if($OldAbstract -isnot [System.DBNull]) {$OldAbstract = $OldAbstract.Replace("'","''")} 
+0

标记为答案,如果它的工作,谢谢:) – TechSpud

+0

看起来像测试[System.DBNull] ::值工作。谢谢!最终的代码是: if($ OldAbstract -ne [System.DBNull] :: Value){$ OldAbstract = $ OldAbstract.Replace(“'”,“''”)} – Michael

+0

很酷。没问题 :) – TechSpud