奇怪问题。(50分)

  • 主题发起人 主题发起人 forverpain
  • 开始时间 开始时间
F

forverpain

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SQL SERVER 建了一个建了一个数据表,所有字段都是INT 型的。
表中没有任何数据。
我用 <%if rs.eof then
response.write "null"
else
response.write "not null"%>判断,输出竟然为not null!
为什么?
 
用 <%if (rs.eof) or (rs.bof) then
response.write "null"
else
response.write "not null"%>

再试试,你才打开应当是BOF为真。
 
不行,还是不行。
数据库中绝对没有数据。
我用的SQL语句为:
select max(ID) from article
然后想判断如果max(ID)=0 的话说明现在还没有数据,那就把order=1
否则order:=order+1
开始的时候我用 if rs(0)=0 判断,不行;接着用 if rs(0)=NULL 、if rs.eof
还是不行。
刚才用 if rs.eof or rs.bof 判断照样不行。
只有用if not rs.eof判断才成功,可着明显是错误呀!
 
怪事情。
我在查询分析器中用"select * from article"查询的时候发现为空,什么结果都没有。
但是我用"select max(id) from article"查询的时候他的结果竟然是NULL!
为什么会这样?
 
所有字段都是INT 型的吗?

不会有char字段吧?

 
个别是CHAR类型。
但是ID类型绝对是INT。
 
在这里有区别吗?
 
当然有分别,没有数值就是NULL,在数据库中数值类型为零和为NULL不是一会事。
字符串类型为空和为NULL也不是一会事。

为NULL表示没有分配一个保存数据的实际地址,为某一个具体的数据实际(不论空或0)均
需要磁盘或内存空间来保存它。
 
但是现在的问题是,我在SELECT的时候记录集是空的呀,他应该返回空才对呀,为什么
会返回NULL呢?
 
这里有个易模糊的说法:空和NULL。

返回空就是返回了NULL,但是字符串的空不是NULL
 
那如何解决
<%if rs.eof then
response.write "null"
else
response.write "not null"%>输出为"not null"的问题呢?
 
<%
if rs.eof and rs.bof then
response.write "null"
else
response.write "not null"
%>
 
这样还是不行。
我刚才又仔细的看了一下,在分析查询器中执行"select max(id) 'maxid' from article"
的结果是
maxid
1 NULL
也就是说,这个语句的执行结果SQL SERVER认为是有的,但是是NULL
我又执行"select * from article"结果如下:
id order ..... (字段名称)
这里仅仅有字段名称,没有值。也就是说,这个语句SQL SERVER才认为是 EOF OR BOF。
 
我写的asp+access都是用
“ if rs.eof and rs.bof then ” 作判断的,
MS SERVER我还没试过,应该是一样的吧,[:)]
 
if rs(0) is NULL 可以吗?
 
呵呵,ACCESS完全和SQL SERVER 是两个概念!
我以前没有做过SQL SERVER,也做的是ACCESS,根本就没有这样的问题。
当时感觉很顺,数据库的操作和DELPHI几乎是一样的。
现在对SQL SERVER 进行操作后才发现不知道是MS故意搞的还是怎么会事情,
SQL SERVER经常会残生一些莫名其妙的问题。这些问题你根本就会意想不到,
根本就会想不到以前用起来绝对正确的东西现在竟然市错误的!
而且好象错误也特别的多。
我这几天都快要被这写问题搞疯掉了。有的代码我同篇看上好几遍,感觉一点问题都没有,
可以一运行就有错误,而且错的都让你找不出原因!
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
850
SUNSTONE的Delphi笔记
S
后退
顶部