Click here to Skip to main content
15,077,641 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I created this function to count the total records in the table. If I call this function more than once, I get a Stack Overflow error and the program stops. What am I doing wrong here?

What I have tried:

VBt
Public Function GetTotalDocs(ByVal TotalDocs As Integer)

    Dim strSql As String = "Select COUNT(*) FROM Documents"
    Using conn As New VistaDBConnection(dbConn)
        Using cmd As New VistaDBCommand(strSql, conn)

            Try
                conn.Open()
                TotalDocs = cmd.ExecuteNonQuery()

            Catch ex As Exception
                XtraMessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try

        End Using
    End Using

    Return GetTotalDocs(TotalDocs)

End Function
Posted
Updated 11-Feb-21 9:10am
Comments
Member 14732673 11-Feb-21 15:06pm
   
you have a recursive routine. It will continue to call itself until it runs out of stack space.

Return TotalDocs instead of Return GetTotalDocs(TotalDocs)
crmfghtr 11-Feb-21 15:47pm
   
Ok, I see that. Thanks.

Look at your code - I'll remove the irrelevant stuff:
VB
Public Function GetTotalDocs(ByVal TotalDocs As Integer)
...
    Return GetTotalDocs(TotalDocs)
End Function
So every time you call it, it calls itself. Which calls itself. And that calls itself...
The SQL stuff just slows it down, but it rapidly fills up your stack and when that happens you get a Stack Overflow exception and you app crashes.

It's called "infinite recursion" and you really don't want to do that ... just return the count.
   
Comments
crmfghtr 11-Feb-21 15:48pm
   
Yes, I see that now Thanks...
OriginalGriff 11-Feb-21 15:48pm
   
You're welcome!
Don't know what you try to do but:
VB
Public Function GetTotalDocs(ByVal TotalDocs As Integer)

    Dim strSql As String = "Select COUNT(*) FROM Documents"
    Using conn As New VistaDBConnection(dbConn)
        Using cmd As New VistaDBCommand(strSql, conn)

            Try
                conn.Open()
                TotalDocs = cmd.ExecuteNonQuery()

            Catch ex As Exception
                XtraMessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try

        End Using
    End Using

    Return GetTotalDocs(TotalDocs) ' here you call the function itself in order to get the result.
                                   ' This is an infinite recursion
End Function

Quote:
What am I doing wrong here?

Your code do not behave the way you expect, or you don't understand why !

There is an almost universal solution: Run your code on debugger step by step, inspect variables.
The debugger is here to show you what your code is doing and your task is to compare with what it should do.
There is no magic in the debugger, it don't know what your code is supposed to do, it don't find bugs, it just help you to by showing you what is going on. When the code don't do what is expected, you are close to a bug.
To see what your code is doing: Just set a breakpoint and see your code performing, the debugger allow you to execute lines 1 by 1 and to inspect variables as it execute.

Debugger - Wikipedia, the free encyclopedia[^]

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]
Basic Debugging with Visual Studio 2010 - YouTube[^]

Visual Basic / Visual Studio Video Tutorial - Basic Debugging - YouTube[^]
Visual Basic .NET programming for Beginners - Breakpoints and Debugging Tools[^]

The debugger is here to only show you what your code is doing and your task is to compare with what it should do.
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900