C# 判断SqlDataReader的结果是空还是NULL 50

例如:stringsql="selectst_brithdayfromstudentswherest_id=8";这条语句在SQL2000的查询分析器中输出的结果是这样的... 例如:
string sql = "select st_brithday from students where st_id = 8";

这条语句在SQL2000的查询分析器中输出的结果是这样的:
1、没有符合st_id = 8条件的记录,数据的结果是空的。
2、有符合条件的记录,但是该学生的生日没有填写是个"NULL"值

现在的问题是用read()不能分辨,FieldCount()结果全都是1,GetSchemaTable().Rows.Count也不能分辨。求一方法能分辨出来查询结果!!
展开
 我来答
百度网友d242235
推荐于2016-03-07 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:818万
展开全部
FieldCount属性返回当前行中的列数,你的sql只查询st_brithday这一列,自然永远都返回1.下面来说你提到的两种情况。
1.没有符合条件的记录。
那么查询结果为空,记录集的行数应该是0。你可以去判断SqlDataReader.HasRows,如果返回true,则表示查询到了记录,否则表示没有符合条件的记录集。
2.又符合条件的记录,但是某列值为null,就这样判断:
if(read["st_brithday"] == DBNull.Value)
{
// st_brithday 列为null值。
}
追问
你的这个答案还不错,不过还是会报错。。。。”在没有任何数据的时候无效的尝试“
追答
你该多独立思考一下,"没有任何数据的时候无效的尝试",从字意上看,就是你的DataReader并没有取到记录,你仍然尝试从中读取数据。所以,跟进你自己的代码,看看你的DataReader到底有没有包含记录。使用上文提过的DataReader.HasRows就可以判断。
zzkongfu
2011-05-13 · TA获得超过154个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:106万
展开全部
string sql = "select (case when ast_brithday is null then '' else ast_brithday end) as ast_brithday from students where st_id = 8";

DataTable dtTemp=new DataTable ();
using (SqlDataReader objReader = cmm.ExecuteReader(CommandBehavior.CloseConnection))
{
dtTemp.Columns.Add("st_brithday");
while (objReader.Read())
{
DataRow dr = dtTemp.NewRow();
dr[0] = Convert.ToString(objReade["st_brithday"]);
dtTemp.Rows.Add(dr);
}
}
}

这样一来,如果没有符合st_id = 8条件的记录,数据的结果是空的, while (objReader.Read())不会往下执行,
如果有符合条件的记录,但是该学生的生日没有填写是个"NULL"值,则会返回空字符串,不会报错
追问
你可以试一下。。无论是空的还是NULL的,objReader.Reader()都是TRUE.....
追答
楼主你是说  当查询结果为空的时候   while (objReader.Read()) 为true?  这不可能,这个语法我经常用,你再调试下,可能是什么地方写错了,如果为空,肯定是不会执行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-05-13 · 超过21用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:59.3万
展开全部
reader.read()为true的话就肯定有数据,只是这个数据有可能是DBNull
DBNull转成C#语言之后就是null对象了
if(reader.read())
{
if(reader["st_brithday"] is DBNull )

messagebox.show("该同学没有填写生日");

string yy=reader["st_brithday"] is DBNull ? new DateTime(2011, 8, 8) : (DateTime)reader["st_brithday"];
}
具体也不知道你要实现怎么功能,我只能这样提示你了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vivifirst
2011-05-13 · TA获得超过837个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:228万
展开全部
楼主可以将查询出的数据使用sqlDataReader对象的read()方法读取的时候,
判断sqlDataReader对象[列名]==null。这样的话就可以了。
追问
这样也不对,没有任何数据时进行无效的尝试!    因为无法判断结果是空还是NULL,如果是空的话那么就没数据进行操作了么。
追答
if(sdr.Read()){
if(Convert.IsDBNull(sdr["birth"])){
//生日为空
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
怕破瓦落地
2011-05-13
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
string sql = "select isnull(st_brithday,'') from students where st_id = 8";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式