用.net 2.0(sp1)访问SqlServer 2005(打过累计补丁包),对一个表进行Select count(*)查询。
用SqlCommand的ExecuteScalar()方法返回结果。可是会偶然性间歇性的出现查询不出结果。
command.ExecuteScalar()后得到的结果为DBNull.Value,有朋友遇到过这个问题吗?困扰我很久了。
之前用Nhibernate实现,发现间歇性hql query出错,改成强类型DataSet,Fill的时候间歇性出错。改成SqlConnection+SqlCommand查询select *和Select count(*)都会出现本来有数据结果返回DBNull.Value,归根结底都是不能重现的,并发量高时候出现.net sql client访问数据库的错误。这是微软的bug吗?希望有人帮我解决,谢谢大家。
附表的DDL:
CREATE TABLE [dbo].[Table](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FKCode] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[GUID] [varchar](256) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_CHANNELUNIQUERESID] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
CREATE UNIQUE INDEX [AK] ON [dbo].[Table]([FKCode], [GUID]) ON [PRIMARY]
select时候尽量带着nolock
有可能是查询超时了
这个是很正常的
ExecuteScalar :返回第一列,第一行的数据。
第一列第一行不为空,那么ExecuteScalar就直接对应的值。
有第一行,但是第一列为空,那么返回的是 DBNull 。
一行都没有,那么ExecuteScalar就返回null
所以建议你加一个判断
if (obj == null && obj == DBNull.Value)
{
isHave = false;
}
换成Select count(1)或Select count (主键)试试