作者yauhh (哟)
看板Visual_Basic
标题[ASP ] IsNull和adodb.recordset的综合作用?
时间Tue Sep 23 16:19:06 2008
我有段程式码:
Set Rec = Server.CreateObject("adodb.recordset")
...
If
IsNull(Rec("a")) Then
...
End If
response.write rec("a") & ", is null = " & isnull(rec("a"))
response.end
全小写程式码是用来做assertion.
却发现明明Rec("a")不是空值,assertion印出的东西是:
<空字串>, is null = False
後方仍然说它不是空值,但奇了,前面印不出rec("a")本来的值.
最後归纳出来的推论,我猜,是 IsNull(Rec("a")) 有一些副作用,把 Rec 物件
的某些状态改掉了. 不晓得是不是这个原因?
於是我在其他的程式部份,卡在虽然用一些程式检查IsNull,却仍回报
"
Null的使用错误: replace"
卡住的程式段落是:
function f(s)
if isnull(s) then
f = ""
else
f = s
f =
replace(f, "'", "''")
end if
end function
把rec("a")丢进函数,即使不是 Null, 在replace部份仍回报 Null 使用错误.
让我当场觉得,ASP怎麽那麽难写!不是Null的资料却表现得像Null一样?
--------
我的解决办法是,把IsNull与adodb.recordset分开,
例如:
t = Rec("a")
If IsNull(t) Then
t = ""
End If
f(t)
...
function f(s)
f = s
f = replace(f, "'", "''")
end function
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.12.37
※ 编辑: yauhh 来自: 220.130.12.37 (09/23 17:35)
1F:→ JacobTai:是你的栏位型态的问题吧...是"备忘"? 09/24 11:07
2F:→ yauhh:对,栏位是备忘类型,可容许空值 09/24 22:51
3F:→ JacobTai:ado 里面只容许读一次...之後就会变成空值... 09/25 11:36
4F:→ yauhh:惊! 谢谢 09/25 11:58