0

このエラーが発生しますSystem.OutOfMemoryException:タイプ'System.OutOfMemoryExceptionの例外がスローされました。`なぜですか?? 親切に私を助けてください。このエラーが発生します(ローカルマシンではなく、Webサイトをオンラインでホストしている場合のみ)。

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
4

1 に答える 1

1

コードを理解するのは少し複雑ですが、このブロックでは、接続objConnを閉じずにSubを終了します。

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

この巨大なコードブロックをもっと小さな単位でリファクタリングしてみてください。このようにして、Usingステートメントを使用して、OleDbConnection、OleDbAdapter、OleDbCommand...などのDisposableオブジェクトを正しく破棄できます。

于 2012-09-29T08:04:51.737 に答える