如果你知道SqlDataReader
包含一行,那么你可以这样做:
If objDR.HasRows() Then
objDR.read
.........
End If
而不是:
Do While objDR.Read
..........
loop
如果您使用DataTable
,则必须执行以下操作:
For Each row as DataRow In objDT.Rows
...................
Next
如果只有一行,你可以对SqlDataReader
做些什么吗?我问,因为我相信它使代码更具可读性。
答案 0 :(得分:2)
你可以这样做:
If objDR.Read() Then
.........
End If
答案 1 :(得分:0)
你可以这样做:
If objDT IsNot Nothing AndAlso objDT.Rows.Count > 0 Then
' We have one or more rows
For Each row as DataRow In objDT.Rows
' Do something with row here
Next
End If
答案 2 :(得分:0)
我遇到过这样的情况,在这种情况下,您的代码将保证只生成一个结果行,并且我倾向于同意对该行的枚举器进行实例化并不理想。事实上,我已经看到了一些使用单行(甚至是单列)结果集的应用程序,作者编写了一些非常简单的包装器类方法,这些方法旨在采用任意单结果查询并返回它只需一次通话,就可以用干净整洁的方法打包电话,参数等的开销。
在这种情况下,我实际上认为检查行的Count属性是一个好例子,如果它是非属性,则抛出异常。如果你有一个永远的查询,并且总是应该返回一个值,但是更多的显示,那就是错误的。
if (objDT != null && objDT.Rows.Count != 1)
{
DataRow x = objDT.Rows[0];
var value1 = x["column1"]; // and so on
//..do whatever
}
else
{
if (objDT==null)
{
throw new InvalidOperationException("No data returned");
}
if (objDT.Rows.Count != 1)
{
throw new InvalidOperationException("Multiple values returned where only one expected.");
}
}