当前位置:编程学习 > C#/ASP.NET >>

水晶报表动态连接数据库后怎么释放连接?

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Public Class TE0048_Cry
    Inherits System.Windows.Forms.Form

    Public Shared sReportType As Object

    Public Shared P_STRE_LOC_CD As String
    Public Shared sShitOne As String
    Public Shared sShitTwo As String
    Public Shared sUsername As String

    Dim CrtableLogoninfo As New TableLogOnInfo
    Dim CrConnectionInfo As New ConnectionInfo   
    Dim ParamFields As New ParameterFields
    Dim CrReportDocumentOne As New TE0048CRY

    Private Sub TE0048_Cry_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Do_Print()

    End Sub

    Private Sub Do_Print()

        Dim iCount As Integer

        ' Dim sAddr As String

        'Dim CrtableLogoninfos As New TableLogOnInfos
        '  Dim CrtableLogoninfo As New TableLogOnInfo
        '  Dim CrConnectionInfo As New ConnectionInfo
        Dim CrTables As Tables
        Dim CrTable As Table

        Dim ParamField As ParameterField
        ' Dim ParamFields As New ParameterFields
        Dim DiscreteVal As ParameterDiscreteValue

        ' Dim CrReportDocumentOne As New TE0048CRY
        'Dim CrReportDocumentTwo As New BilletTwo

        'If sReportType = "1" Then
        '    CrReportDocumentTwo = Nothing
        'Else
        '    CrReportDocumentOne = Nothing
        'End If
        Try
            With CrConnectionInfo
                .ServerName = "CSGMES"
                'If you are connecting to Oracle there is no 
                'DatabaseName. Use an empty string. 
                'For example, .DatabaseName = "" 
                .DatabaseName = ""
                .UserID = "PROD00"
                .Password = "PROD00"
            End With

            ParamField = New ParameterField
            ParamField.ParameterFieldName = "P_STRE_LOC_CD"
            DiscreteVal = New ParameterDiscreteValue
            DiscreteVal.Value = P_STRE_LOC_CD
            ParamField.CurrentValues.Add(DiscreteVal)
            ParamFields.Add(ParamField)

            ParamField = New ParameterField
            ParamField.ParameterFieldName = "UserName"
            DiscreteVal = New ParameterDiscreteValue
            DiscreteVal.Value = GeneralCommon.sUsername
            ParamField.CurrentValues.Add(DiscreteVal)
            ParamFields.Add(ParamField)

            ParamField = New ParameterField
            ParamField.ParameterFieldName = "ShitOne"
            DiscreteVal = New ParameterDiscreteValue
            DiscreteVal.Value = sShitOne
            ParamField.CurrentValues.Add(DiscreteVal)
            ParamFields.Add(ParamField)

            ParamField = New ParameterField
            ParamField.ParameterFieldName = "ShitTwo"
            DiscreteVal = New ParameterDiscreteValue
            DiscreteVal.Value = sShitTwo
            ParamField.CurrentValues.Add(DiscreteVal)
            ParamFields.Add(ParamField)

            CRYViewer1.ParameterFieldInfo = ParamFields
            'If sReportType = "1" Then
            CrTables = CrReportDocumentOne.Database.Tables
            'ElseIf sReportType = "2" Then
            '    CrTables = CrReportDocumentTwo.Database.Tables
            'End If

            For Each CrTable In CrTables
                CrtableLogoninfo = CrTable.LogOnInfo
                CrtableLogoninfo.ConnectionInfo = CrConnectionInfo
                CrTable.ApplyLogOnInfo(CrtableLogoninfo)
            Next

            'If sReportType = "1" Then
            CRYViewer1.ReportSource = CrReportDocumentOne
            CrReportDocumentOne.Refresh()

            'ElseIf sReportType = "2" Then
            '    CRYViewer1.ReportSource = CrReportDocumentTwo
            'End If
            'CrConnectionInfo = Nothing        
        Catch ex As Exception
            GeneralCommon.Gp_MsgBoxDisplay(ex.Message)
        End Try

    End Sub

    Private Sub TE0048_Cry_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        'CrConnectionInfo = Nothing
        'ParamFields = Nothing
        'CrReportDocumentOne.Close()
        CrReportDocumentOne.Dispose()
        CRYViewer1.ReportSource = Nothing
        CRYViewer1 = Nothing
        'CrReportDocumentOne = Nothing
        'Application.Exit()
        Me.Dispose()    
    End Sub
End Class

怎么释放报表或这个连接啊?关键是这里不会啊
我都把这个窗口关闭了,但是那个连接还在呢
我是这个窗口里面一放一个CRYViewer1控件 CrystalDecisions.Windows.Forms.CrystalReporViewer,CRYViewer1.ReportSource 等于我那个报表,这个报表是连接到后台一个过程的
--------------------编程问答--------------------  Private   Sub   TE0048_Cry_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load 

。。。。。。。。。
没有关闭数据连接
'CrConnectionInfo   =   Nothing       

  Private   Sub   TE0048_Cry_Closed(ByVal   sender   As   Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Closed 
                'CrConnectionInfo   =   Nothing 
                'ParamFields   =   Nothing 
                'CrReportDocumentOne.Close() 
                CrReportDocumentOne.Dispose() 
                CRYViewer1.ReportSource   =   Nothing 
                CRYViewer1   =   Nothing 
                'CrReportDocumentOne   =   Nothing 
                'Application.Exit() 
                Me.Dispose()         
        End   Sub 
End   Class 
怎么不使用,ME.CLOSE()
或者 把你所有的调用都弄个释放; --------------------编程问答--------------------   Private   Sub   TE0048_Cry_Closed(ByVal   sender   As   Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Closed 
                'CrConnectionInfo   =   Nothing 
                'ParamFields   =   Nothing 
                'CrReportDocumentOne.Close() 
                CrReportDocumentOne.Dispose() 
                CRYViewer1.ReportSource   =   Nothing 
                CRYViewer1   =   Nothing 
                'CrReportDocumentOne   =   Nothing 
                'Application.Exit() 
                'Me.Close()
                Me.Dispose()         
        End   Sub 
上面注释的我都试了,还是没给我释放连接,请问有什么好方法吗?
如果只开一个连接到数据库,数据库会自动回收,多于2个就不能回收了
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,