如何检查datareader是否为空或空

我有一个datareader从sql server数据库返回一个logging。 我在数据库中有一个名为“Additional”的字段。 这个字段是50%的空或空。

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

我努力了:

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

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

exception详细信息: System.IndexOutOfRangeException:其他

任何帮助将不胜感激…


也可以看看:

检查SqlDataReader对象中的列名称

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

我没有使用DataReaders 3年以上,所以我想确认我的记忆,发现这一点。 无论如何,对于像这样发生的任何人,我想要一个方法来testingIsDBNull使用列名而不是序号,并且您正在使用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"; } 

这是正确和经过testing的解决scheme

 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方法

除了给出的build议,你可以直接从你的查询这样做 –

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

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

@Joe Philllips

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

AMG – 抱歉,所有人都有一个金发的时刻。 我最初devise数据库后,“附加”字段被添加到数据库。

我更新了我所有的代码来使用这个新的领域,但是我忘了更新调用select数据库字段的实际的数据读取代码,因此它不会调用“Additional”

我也遇到这种问题,但我的,我使用DbDataReader作为我的通用阅读器(SQL,甲骨文,OleDb等)。 如果使用DataTable,DataTable具有这种方法:

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

使用此我可以确定该列是否存在于我的查询结果集中。 我也在看,如果DbDataReader有这个能力。