SqlDataReader - 更易读的代码

时间:2013-09-12 18:45:02

标签: vb.net

如果你知道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做些什么吗?我问,因为我相信它使代码更具可读性。

3 个答案:

答案 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."); 
    }
}