2011-10-19 45 views
0

我正在使用Crystal報告(過程綁定),它在我退出報告時未釋放連接。 我傳遞參數給晶體作爲:未使用SetDatabaseLogon關閉Crystal報告連接

Dim InserSql = "exec USP_TEST parameter1,parameter2 
ConnectDB() /* connecting to database */ 
DtAdapter = New OdbcDataAdapter(InserSql, Con) 
DtAdapter.Fill(DataTable) 
rpt.SetDataSource(DataTable) 
rpt.SetDatabaseLogon("usrname", "password") 
CrystalReportViewer1.ReportSource = rpt /* rpt is crystal report object */ 
Con.Close() /*closing connection */ 
rpt.Database.Dispose() 
Con.Dispose() 

其封閉在UI連接,但不釋放水晶報表的連接。 請幫忙。

+0

您如何驗證連接已關閉?這是一個winform或ASP.NET Web應用程序? – Justin

+0

不,它是Windows應用程序。我從服務器連接識別打開的連接。 – Preeti

回答

1

您正在使用報告登錄到服務器,但將報表的數據源設置爲使用dataadapter拉出的數據表。一旦填充了數據表並填充了連接,您將不再連接到sql服務器,因爲您正在處理內存中的數據集。不是爲報告設置登錄憑據,而是清除數據源連接並將數據源設置爲內存中的數據表。

Dim InserSql = "exec USP_TEST parameter1,parameter2" 
ConnectDB() /* connecting to database */ 
DtAdapter = New OdbcDataAdapter(InserSql, Con) 
DtAdapter.Fill(DataTable) 
DtAdapter.Dispose() /* dispose data adapter after filling datatable */ 
Con.Close() 
Con.Dispose() /* connection disposed */ 
rpt.DataSourceConnections.Clear() /* Clear existing login/datasource for report object */ 
rpt.SetDataSource(DataTable)  
CrystalReportViewer1.ReportSource = rpt /* rpt is crystal report object */ 
CrystalReportViewer1.RefreshReport() /* rpt is refreshed with data from datatable and is not connected to database */