看起来IDataReader.Read()总是至少有一次是真的(如果我错了,这让我知道。)那么如果没有记录而只是将它封装在try/catch中,你怎么知道它呢?检测IDataReader是否为空的最佳方法是什么?
回答
if(dr.Read())
{
//do stuff
}
else
{
//it's empty
}
通常你会做到这一点,但:
while(dr.Read())
{
}
这是我试过的,但似乎至少有一次该条件是真的,但如果尝试从读取器中提取一个值,它会引发错误。 – 2008-09-09 02:20:36
注意这一点,`Read()`[提前读者到下一行](https://msdn.microsoft.com/en-us/library/system.data.idatareader.read(v = vs.110 )的.aspx)。所以它不**只是**检查数据读取器是否包含数据 – Liam 2017-06-30 10:16:37
是的,如果你想使用的接口,然后阅读,直到假是检验的唯一途径。如果您正在寻找一个通用的IDataReader
实现,您可以尝试DbDataReader
并使用HasRows
属性。
DbDataReader是一个抽象类 – aku 2008-09-09 02:18:41
您可以只投System.Data.IDataReader
到System.Data.Common.DbDataReader
using (System.Data.IDataReader IReader = ICommand.ExecuteReader())
{
if (((System.Data.Common.DbDataReader)IReader).HasRows)
{
//do stuff
}
} // End Using IReader
这是纯粹的邪恶,但它(通常)工程;)
(假设你的IDataReader
实例通过自定义ADO.NET提供者执行,而不是一些自定义愚蠢的类只是实施IDataReader
而不是从DbDataReader
[其实施IDataReader
])。
过这个问题只是偶然与此想出了...
bool isBeforeEoF;
do
{
isBeforeEoF = reader.Read();
if (isBeforeEoF)
{
yield return new Foo()
{
StreamID = (Guid)reader["ID"],
FileType = (string)reader["Type"],
Name = (string)reader["Name"],
RelativePath = (string)reader["RelativePath"]
};
}
} while (isBeforeEoF);
- 1. 在C#中,测试数据集是否为空的最佳方法是什么?
- 2. 检查对象属性是否为空的最佳方法是什么?
- 3. 什么是检测Object是否是Stream类实例的最佳方法?
- 4. 什么是检查IQueryable结果集的最佳方法是空
- 5. 检查视窗是否可见的最佳方法是什么?
- 6. 检查FileInputStream是否关闭的最佳方法是什么?
- 7. 什么是检查PDO是否存在的最佳方法
- 8. 检查url命名空间是否唯一的最佳方法是什么?
- 9. 检测代理服务器是否可用的最佳方法是什么?
- 10. 什么是检测Java API调用是否成功完成的最佳方法
- 11. 什么是检测Webstart是否启动应用程序的最佳方法
- 12. 检查DTL中的字段是否为空的最佳方法
- 13. 什么是防弹方法来检查NSString是否为空/空?
- 14. 检查listview是否为空的最佳方法?
- 15. 检查3个文本框是否为空的最佳方法
- 16. 检查SYS_REFCURSOR是否为空的最佳方法
- 17. 检查空数组的最佳方法是什么?
- 18. 检测网站国家代码的最佳方法是什么?
- 19. 检测Oracle连接泄漏的最佳方法是什么?
- 20. 在JavaScript中检测xml的最佳方法是什么
- 21. 使用PHP检测标签的最佳方法是什么?
- 22. 检测精灵之间碰撞的最佳方法是什么?
- 23. 检测SMO的最佳方法是什么?
- 24. 用php检测浏览器的最佳方法是什么?
- 25. 什么是检测白色的最佳方法?
- 26. 找出图像列是否为空的最佳方法是什么?
- 27. 检查变量是否为列表的最佳方法是什么?
- 28. 什么是检查JavaScript变量是否为空的最可靠的方法?
- 29. 为什么我的方法无法正确检测对象是否为空?
- 30. 单元测试异步方法的最佳方法是什么?
本是正确的。如果一个IDataReader正在读取一个空行集合,那么对Read()的第一次调用将返回false(假设您正在使用的具体实现已经被正确写入)。 – 2009-02-25 09:22:13