如何检查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有这个能力。