1

如果x等于,1那么我们需要SqlDataReaderfromGetDataReader1方法。否则,我们需要SqlDataReaderGetDataReader2. 这是唯一的区别。除此之外,所有需要的代码(它说在这里做东西)都将被复制。我怎样才能使它更优雅,这样我就不必在两个 using 语句中重复所有逻辑?

更新:在简化这篇文章的代码时,我错过了一个额外的因素。GetDataReader1 采用 2 个参数,GetDataReader2 采用 3 个参数。如果我创建一个 GetDataReader 函数并将If语句移到那里,我是否会被迫传入 GetDataReader1 方法当前不需要的额外参数?

Dim value1, value2, value3 As String

If x = 1 Then
    Using myDataReader As SqlDataReader = GetDataReader1(value1, value2)
        myDataReader.Read()
        If myDataReader.HasRows Then
            'do stuff here
        End If
     End Using
 Else
     Using myDataReader As SqlDataReader = GetDataReader2(value1, value2, value3)
         myDataReader.Read()
         If myDataReader.HasRows Then
             'do stuff here
         End If
     End Using
 End If
4

3 回答 3

3

传入xtoGetDataReader并让它决定返回什么。

Using myDataReader As SqlDataReader = GetDataReader(x)
    myDataReader.Read()
    If myDataReader.HasRows Then
        'do stuff here
    End If
End Using

这会将您推IfGetDataReader不应该有太多重复的地方。


更新 - 关于问题的更新。

您仍然可以使用相同的机制 - 将决定推送给方法 - 您只需传入所有可能需要的参数,除了x

Using myDataReader As SqlDataReader = GetDataReader(x, value1, value2, value3)
于 2012-10-31T20:16:27.977 回答
1

将用于确定要使用哪个 SqlDataReader 的逻辑移到它自己的函数中并传递它x

    Using myDataReader As SqlDataReader = GetDataReader(x)
         myDataReader.Read()
         If myDataReader.HasRows Then
             'do stuff here
         End If
     End Using

 Private Function GetDataReader(ByVal x As Integer) As SqlDataReader
     If x = 1 Then
        Return GetDataReader1()
     Else
        Return GetDataReader2()
     End If
 End Function
于 2012-10-31T20:20:21.940 回答
0

您不需要在 Using 语句中创建读取器。之前创建它们

Dim value1, value2, value3 As String
Dim myDataReader As SqlDataReader

If x = 1 Then
    myDataReader = GetDataReader1(value1, value2)
Else
    myDataReader = GetDataReader2(value1, value2, value3)
End If
Using myDataReader
    If myDataReader.Read() Then
        'do stuff here
    End If
End Using
于 2012-10-31T20:47:06.023 回答