如何检查datareader是空还是空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查datareader是空还是空相关的知识,希望对你有一定的参考价值。

我有一个datareader,它返回sql server数据库中的记录列表。我在数据库中有一个名为“Additional”的字段。此字段为空或空的50%。

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

我试过了:

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

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

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

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


See Also:

Check for column name in a SqlDataReader object

答案
if (myReader["Additional"] != DBNull.Value)
{
    ltlAdditional.Text = "contains data";
}
else
{
     ltlAdditional.Text = "is null";
}
另一答案

我也遇到过这种问题,但我的,我正在使用DbDataReader作为我的通用阅读器(对于SQL,Oracle,OleDb等)。如果使用DataTable,DataTable有这个方法:

DataTable dt = new DataTable();
dt.Rows[0].Table.Columns.Contains("SampleColumn");

使用这个我可以确定该列是否存在于我的查询所具有的结果集中。我也在寻找DbDataReader是否具备此功能。

另一答案

这个

例:

objCar.StrDescription = (objSqlDataReader["fieldDescription"].GetType() != typeof(DBNull)) ? (String)objSqlDataReader["fieldDescription"] : "";
另一答案

试试这个更简单的等效语法:

ltlAdditional.Text = (myReader["Additional"] == DBNull.Value) ? "is null" : "contains data";
另一答案

我没有使用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;
    }
}

凯文

另一答案
if (myReader.HasRows) //The key Word is **.HasRows**

{

    ltlAdditional.Text = "Contains data";

}

else

{   

    ltlAdditional.Text = "Is null Or Empty";

}
另一答案

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

if (myReader.Read())
{

    ltlAdditional.Text = "Contains data";
}
else
{   
    ltlAdditional.Text = "Is null";
}
另一答案

我也使用OleDbDataReader.IsDBNull()

if ( myReader.IsDBNull(colNum) ) { retrievedValue = ""; }
else { retrievedValue = myReader.GetString(colNum); }
另一答案

首先,你可能想要检查DBNull而不是常规的Null

或者你可以看看IsDBNull方法

另一答案

除了给出的建议,您可以直接从您的查询中执行此操作 -

SELECT ISNULL([Additional], -1) AS [Additional]

这样您就可以编写条件来检查字段值是否为<0或> = 0。

另一答案

@Joe Phillips

SQlDataReader.IsDBNull(int index)需要列的序号。有没有办法使用列名检查空值,而不是它的序号?

另一答案

AMG - 对不起,有一个金发碧眼的时刻。在我最初设计数据库之后,“Additional”字段被添加到数据库中。

我更新了所有代码以使用这个新字段,但是我忘了更新正在调用的实际datareader代码来选择数据库字段,因此它没有调用“Additional”

以上是关于如何检查datareader是空还是空的主要内容,如果未能解决你的问题,请参考以下文章

Android,从其他片段返回的空列表视图

在 C# 中确定 XmlNode 是空还是 null?

对字符串变量进行空或空检查

ios 检查空对象

确定槽内容是空还是空

如何检查数据库中已有的空表[重复]