Visual basic-函数中的函数作为变量



我没有太多使用visual basic的经验,所以请温柔一点。我想让工作成为一个由其他人编程的程序(由于许多原因,那个人不会继续工作(,所以在我到达这段代码之前一切都很好:

Function ExisteProceso02(ByVal CodigoBarra As String) As Boolean
Dim miComando As New SqlCommand
Dim miDataAdapter As New SqlDataAdapter
Dim Table As New DataTable
Dim strSQL As String
strSQL = "Select * From PCT_GuiasDespacho Where CodigoBarra = '" & CodigoBarra & "' And 
PreAnalisis = 'SI'"
miComando.CommandText = strSQL
miComando.Connection = miConexion
miDataAdapter.SelectCommand = miComando
miDataAdapter.Fill(Table)
If Table.Rows.Count = 0 Then
ExisteProceso02 = False
Else
ExisteProceso02 = True
End If
miComando.Dispose()
miDataAdapter.Dispose()
Table.Dispose()
End Function

我的问题是,这个函数给自己分配了一个值,它在代码中的其他地方都没有被调用(我使用go to定义。(但它似乎在做什么,我不知道它被称为这个属性,所以我可以获取有关它的信息。

有人能告诉我这是怎么回事吗?或者至少是什么?

谢谢。

这是一种在Visual Basic中返回值的较旧语法(但通常仍然有用(。

而这将结束功能的执行:

Return False

这将设置返回值,但继续执行函数:

ExisteProceso02 = False

除其他外,如果逻辑上必要,它允许稍后更新为新的返回值。(或者在这种情况下,允许在返回之前显式处理一些对象。尽管现在有更好的方法可以做到这一点。(

因此,基本上,在Visual Basic中,为该函数中的函数名设置值意味着";当函数结束时,返回该值";。

在使用数据库对象的方法中声明数据库对象,以便关闭和处理它们。显然,你已经在其他地方声明了这种联系。即使出现错误,Using...End Using块也会为您处理此问题。始终使用参数以避免Sql注入和其他原因。我不得不猜测参数的数据类型。请检查数据库的类型是否正确。

至于将返回值分配给函数名,这是旧的vb6语法。它仍然有效。目前的语法是使用Return关键字,使其与其他语言保持一致。

由于您所需要的只是计数,所以我调整了Sql命令,只要求这样做。然后您可以使用.ExecuteScalar。Sql Server还提供了If Exists,这对于大表来说可能会快一点,因为它一找到匹配项就停止查找,而不是扫描整个表。

Private ConStr As String = "Your connection string"
Function ExisteProceso02(ByVal CodigoBarra As String) As Boolean
Dim ReturnCount As Integer
Dim strSQL = "Select Count(*) 
From PCT_GuiasDespacho 
Where CodigoBarra = @CodigoBarra 
And PreAnalisis = 'SI';"
Using miConexion As New SqlConnection(ConStr),
miComando As New SqlCommand(strSQL, miConexion)
miComando.Parameters.Add("@CodigoBarra", SqlDbType.NVarChar).Value = CodigoBarra
miConexion.Open()
ReturnCount = CInt(miComando.ExecuteScalar)
End Using
If ReturnCount = 0 Then
Return False
Else
Return True
End If
End Function

轻微重写

Function ExisteProceso02(ByVal CodigoBarra As String) As Boolean
Dim rv As Boolean 'return value <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dim miComando As New SqlCommand
Dim miDataAdapter As New SqlDataAdapter
Dim Table As New DataTable
Dim strSQL As String
'the following statement should be rewritten 
strSQL = "Select * From PCT_GuiasDespacho Where CodigoBarra = '" & CodigoBarra & "' And PreAnalisis = 'SI'"
miComando.CommandText = strSQL
miComando.Connection = miConexion
miDataAdapter.SelectCommand = miComando
miDataAdapter.Fill(Table)
' <<<<<<<<<<<<<<<<<<<<<<<<<
rv = Table.Rows.Count <> 0
' <<<<<<<<<<<<<<<<<<<<<<<<<
miComando.Dispose()
miDataAdapter.Dispose()
Table.Dispose()
Return rv ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
End Function

最新更新