2

如果您知道 aSqlDataReader包含一行,那么您可以这样做:

If objDR.HasRows() Then
objDR.read
.........
End If

而不是这个:

Do While objDR.Read
..........
loop

如果你使用 aDataTable那么你必须这样做:

For Each row as DataRow In objDT.Rows
...................
Next

SqlDataReader如果只有一排,你能做些什么吗?我在问,因为我相信它使代码更具可读性。

4

3 回答 3

2

你可以这样做:

If objDR.Read() Then
  .........
End If
于 2013-09-12T18:47:37.210 回答
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."); 
    }
}
于 2013-09-12T19:46:34.807 回答
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
于 2013-09-12T19:32:55.643 回答