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也不能分辨。求一方法能分辨出来查询结果!! 展开
string sql = "select st_brithday from students where st_id = 8";
这条语句在SQL2000的查询分析器中输出的结果是这样的:
1、没有符合st_id = 8条件的记录,数据的结果是空的。
2、有符合条件的记录,但是该学生的生日没有填写是个"NULL"值
现在的问题是用read()不能分辨,FieldCount()结果全都是1,GetSchemaTable().Rows.Count也不能分辨。求一方法能分辨出来查询结果!! 展开
6个回答
展开全部
FieldCount属性返回当前行中的列数,你的sql只查询st_brithday这一列,自然永远都返回1.下面来说你提到的两种情况。
1.没有符合条件的记录。
那么查询结果为空,记录集的行数应该是0。你可以去判断SqlDataReader.HasRows,如果返回true,则表示查询到了记录,否则表示没有符合条件的记录集。
2.又符合条件的记录,但是某列值为null,就这样判断:
if(read["st_brithday"] == DBNull.Value)
{
// st_brithday 列为null值。
}
1.没有符合条件的记录。
那么查询结果为空,记录集的行数应该是0。你可以去判断SqlDataReader.HasRows,如果返回true,则表示查询到了记录,否则表示没有符合条件的记录集。
2.又符合条件的记录,但是某列值为null,就这样判断:
if(read["st_brithday"] == DBNull.Value)
{
// st_brithday 列为null值。
}
追问
你的这个答案还不错,不过还是会报错。。。。”在没有任何数据的时候无效的尝试“
追答
你该多独立思考一下,"没有任何数据的时候无效的尝试",从字意上看,就是你的DataReader并没有取到记录,你仍然尝试从中读取数据。所以,跟进你自己的代码,看看你的DataReader到底有没有包含记录。使用上文提过的DataReader.HasRows就可以判断。
展开全部
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"值,则会返回空字符串,不会报错
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? 这不可能,这个语法我经常用,你再调试下,可能是什么地方写错了,如果为空,肯定是不会执行的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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"];
}
具体也不知道你要实现怎么功能,我只能这样提示你了!
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"];
}
具体也不知道你要实现怎么功能,我只能这样提示你了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主可以将查询出的数据使用sqlDataReader对象的read()方法读取的时候,
判断sqlDataReader对象[列名]==null。这样的话就可以了。
判断sqlDataReader对象[列名]==null。这样的话就可以了。
追问
这样也不对,没有任何数据时进行无效的尝试! 因为无法判断结果是空还是NULL,如果是空的话那么就没数据进行操作了么。
追答
if(sdr.Read()){
if(Convert.IsDBNull(sdr["birth"])){
//生日为空
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string sql = "select isnull(st_brithday,'') from students where st_id = 8";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询