首页 > 解决方案 > 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 定义。)但它似乎正在做某事,我不知道它叫什么这个属性所以我可以得到有关它的信息。

有人可以告诉我这是如何工作的吗?或者至少它是什么?

谢谢你。

标签: vb.netfunctionvariables

解决方案


在使用它们的方法中声明您的数据库对象,以便可以关闭和处置它们。显然,您已经在其他地方声明了连接。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

推荐阅读