Monodeep
Monodeep

Reputation: 1392

Any possible chance for a memory leak?

i get this error System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException was thrown.` Why?? Kindly help me. I get this error (only when i host the website online, not in local machine).

Dim db As SqlDatabase = Connection.connection
Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click

    'Dim lblNodeID As Label = CType(Master.FindControl("lblParentId"), Label)
    Using conn As DbConnection = db.CreateConnection()
        Dim cmdInsertGroup As SqlCommand = db.GetSqlStringCommand("Insert Into CategoryGroups Values ('" & BLL.getNewGroupIDfromCategoryGroups & "','" & lblParentId.Text.Trim & "','" & txtGroupName.Text.Trim & "')")

       Try
        If fuGroupAttributes.HasFile Then
            fuGroupAttributes.SaveAs(IO.Path.Combine(Server.MapPath("~/Admin/SpecificationExcels"), lblParentId.Text.Trim & IO.Path.GetExtension(fuGroupAttributes.FileName)))

            Dim path As String = Server.MapPath("~/Admin/SpecificationExcels/" & lblParentId.Text.Trim & IO.Path.GetExtension(fuGroupAttributes.FileName))
            Dim strmail As String = String.Empty
            Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";Extended Properties=Excel 12.0;"
            Dim objConn As New OleDbConnection(connectionString)
            objConn.Open()
            Dim strConString As String = "SELECT * FROM [Sheet1$]"
            'where date = CDate('" + DateTime.Today.ToShortDateString() + "')";
            Dim objCmdSelect As New OleDbCommand(strConString, objConn)
            ' Create new OleDbDataAdapter that is used to build a DataSet
            ' based on the preceding SQL SELECT statement.
            Dim objAdapter1 As New OleDbDataAdapter()
            ' Pass the Select command to the adapter.
            objAdapter1.SelectCommand = objCmdSelect
            ' Create new DataSet to hold information from the worksheet.
            Dim ds As New DataSet()
            ' Fill the DataSet with the information from the worksheet.
            objAdapter1.Fill(ds, "ExcelData")
            'My Exp
            Dim _newAttributeID As Integer = BLL.getNewAttributeIDfromGroupAttributes
            Dim _newGroupID As Integer
            conn.Open()
            Dim trans As DbTransaction = conn.BeginTransaction()
            If cbInsertInExistingGroup.Checked Then
                If gvExistingGroups.SelectedValue IsNot Nothing Then
                    _newGroupID = gvExistingGroups.SelectedRow.Cells(1).Text
                Else
                    pnlMessage.Visible = True
                    pnlMessage.BackColor = Drawing.Color.Red
                    lblMessage.ForeColor = Drawing.Color.White
                    lblMessage.Font.Bold = True
                    lblMessage.Text = "Select a Group"
                    Exit Sub
                End If
            Else
                _newGroupID = BLL.getNewGroupIDfromCategoryGroups
                db.ExecuteNonQuery(cmdInsertGroup, trans)

            End If

            For i = 0 To ds.Tables(0).Rows.Count - 1
                ds.Tables(0).Rows(i).Item(0) = _newAttributeID
                ds.Tables(0).Rows(i).Item(1) = _newGroupID
                _newAttributeID = _newAttributeID + 1
            Next
            ' Clean up objects.
            objConn.Close()
            'Dim db As SqlDatabase = Connection.connection
            Dim sqlBulk As New SqlBulkCopy(conn, SqlBulkCopyOptions.Default, trans)
            sqlBulk.DestinationTableName = "GroupAttributes"
            sqlBulk.WriteToServer(ds.Tables(0))

            trans.Commit() ' commit the transaction
            pnlMessage.Visible = True
            pnlMessage.BackColor = Drawing.Color.Green
            lblMessage.ForeColor = Drawing.Color.White
            lblMessage.Font.Bold = True
            lblMessage.Text = "Successfully Uploaded"
            'Response.Redirect("~/Admin/AddSpecifications.aspx?id=" & Request.QueryString(0))
        Else
            pnlMessage.Visible = True
            pnlMessage.BackColor = Drawing.Color.Red
            lblMessage.ForeColor = Drawing.Color.White
            lblMessage.Font.Bold = True
            lblMessage.Text = "Select an Excel File"
            'Response.Write("")
        End If
        Catch ex As Exception
        trans.Rollback() ' rollback the transaction
        pnlMessage.BackColor = Drawing.Color.Red
        lblMessage.ForeColor = Drawing.Color.White
        lblMessage.Font.Bold = True
        lblMessage.Text = "Some Error Occured"
        End Try
    End Using
End Sub

Upvotes: 0

Views: 323

Answers (1)

Steve
Steve

Reputation: 216273

Your code is a bit complicated to follow, but in this block you Exit Sub without closing the connection objConn

If cbInsertInExistingGroup.Checked Then
    If gvExistingGroups.SelectedValue IsNot Nothing Then
        _newGroupID = gvExistingGroups.SelectedRow.Cells(1).Text
    Else
        pnlMessage.Visible = True
        pnlMessage.BackColor = Drawing.Color.Red
        lblMessage.ForeColor = Drawing.Color.White
        lblMessage.Font.Bold = True
        lblMessage.Text = "Select a Group"
        Exit Sub
End If

You should really try to refactor this huge block of code in more small units. In this way you could use the Using statement to dispose correctly of the Disposable objects like OleDbConnection, OleDbAdapter, OleDbCommand....

Upvotes: 1

Related Questions