如何检查datareader是空还是空

Jas*_*son 48 c# null sqldatareader

我有一个datareader从sql server数据库返回一个lsit记录.我在数据库中有一个名为"Additional"的字段.此字段为空或空的50%.

我正在尝试编写检查此字段是否为空的代码.这背后的逻辑是:如果字段"附加"包含文本,则显示信息,否则隐藏字段.

我试过了:

if (myReader["Additional"] != null)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我这个错误:

异常详细信息:System.IndexOutOfRangeException:Additional

任何帮助将不胜感激...


也可以看看:

检查SqlDataReader对象中的列名称

Rob*_*gin 69

if (myReader["Additional"] != DBNull.Value)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}
Run Code Online (Sandbox Code Playgroud)


小智 11

if (myReader.HasRows) //The key Word is **.HasRows**

{

    ltlAdditional.Text = "Contains data";

}

else

{   

    ltlAdditional.Text = "Is null Or Empty";

}
Run Code Online (Sandbox Code Playgroud)


Kev*_*son 10

我没有使用DataReaders 3年多,所以我想确认我的记忆并发现了这一点.无论如何,对于像我这样发帖的人,想要一个使用列名而不是序号来测试IsDBNull的方法,并且你使用的是VS 2008+(我认为是.NET 3.5),你可以编写一个扩展方法这样您就可以传递列名:

public static class DataReaderExtensions
{
    public static bool IsDBNull( this IDataReader dataReader, string columnName )
    {
        return dataReader[columnName] == DBNull.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

凯文


小智 8

这是正确且经过测试的解决方案

if (myReader.Read())
{

    ltlAdditional.Text = "Contains data";
}
else
{   
    ltlAdditional.Text = "Is null";
}
Run Code Online (Sandbox Code Playgroud)

  • 如果他们的if`NULL`在特定列中怎么样? (2认同)

小智 5

我也使用OleDbDataReader.IsDBNull()

if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
Run Code Online (Sandbox Code Playgroud)