Accesso a db Oracle report Crystal Report

martedì 29 luglio 2008 - 15.51

danilolc Profilo | Newbie

Ciao a tutti,
sto smanettando in queste settimane con Visual Studio 2008, e sto realizzando un applicazione che dovrebbe visualizzare un report da un DB Oracle e per il quale ovviamente uso Crystal Reports.
Il report funziona perfettamente: ho creato l'apposito .rpt e Crystal mi estrae esattamente i dati come voglio io, compreso un grafico.

Ho però un problema nel momento in cui vado a testare l'applicazione .NET : praticamente ogni volta che apro la pagina aspx, al cui interno ho usato un CrystalReportViewer, per visualizzare il report, mi appare sempre un form in cui devo inserire sempre la password di accesso al database Oracle, anche se in fase di programmazione ho ovviamente usato una connessione al db in cui ho già impostato user e password :


651x268 29Kb


Qualcuno sa aiutarmi e darmi una dritta su come fare in modo di non far richiedere la password di accesso al db oracle (che è già impostato nella connessione al db!) ?

Grazie!

freeteo Profilo | Guru

ciao,
come passi i dati al report?
Puoi caricarli tramite ado.net e passarglieli tramite SetDataSource, oppure dire al report quali sono le informazioni di connessione a quel server.Un esempio per entrambe le strade lo trovi qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=21962

Ti consiglio il primo se hai già caricato i dati da visualizzare per qualche altro motivo (tipo in qualche altra pagina, oppure hai qualche DataProvider che te li da comodi etc...) altrimenti il secondo, se ti basta impostare solo la connessione e lasci che sia il report a caricarseli.

tu come hai fatto?

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

danilolc Profilo | Newbie

Ciao e grazie per la risposta,

prima di tutto avevo fatto una ricerca sul forum ma mi era sfuggito il thread che mi hai indiciato...

in ogni caso : veramente io non ho scritto alcuna riga di codice per passare i dati a crystal; semplicemente nella pagina in cui visualizzo il report ho inserito un viewer a cui ho associato un CrystalReportSource, il quale è associato al file .rpt con il report, che però ho creato tramite wizard.

quindi non ho scritto alcun codice.

...ora provo a seguire le istruzioni che mi hai passato nell'altro thread.

grazie!

freeteo Profilo | Guru

ok, puoi provare con il codice che ti da maggiore controllo, altrimenti se usi CrystalReportSource nella pagina, allora devi impostare alcuni parametri come la connessione etc...:

<CR:CrystalReportSource ID="CrystalReportSource1" runat="server" EnableDatabaseLogonPrompt="false" > <Report FileName="Report.rpt" > <DataSources> <CR:DataSourceRef DataSourceID="sqlDataSource" TableName="Employees" /> </DataSources> </Report> </CR:CrystalReportSource> <asp:SqlDataSource ID="sqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT * FROM Employees"> </asp:SqlDataSource>

come vedi dentro al tag CrystalReportSource c'è bisogno di impostare le varie datasource del report facendole puntare alla rispettiva datasource di asp.net che fa l'accesso al db.
CrystalReportSource infatti, non è altro che un mappatore di <asp:###DataSource verso un report.

Qualche info la puoi trovare qui:
http://msdn.microsoft.com/it-it/library/ms225468(VS.80).aspx


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

danilolc Profilo | Newbie

>
><CR:CrystalReportSource ID="CrystalReportSource1" runat="server"
> EnableDatabaseLogonPrompt="false" >
> <Report FileName="Report.rpt" >
> <DataSources>
><CR:DataSourceRef DataSourceID="sqlDataSource"
> TableName="Employees" />
> </DataSources>
> </Report>
> </CR:CrystalReportSource>
>
><asp:SqlDataSource ID="sqlDataSource" runat="server"
>ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString
>%>"
> SelectCommand="SELECT * FROM Employees">
> </asp:SqlDataSource>

Ho provato nel modo qui sopra, però nella pagina mi viene visualizzato un errore di accesso al db :

Accesso non riuscito. Dettagli: Codice di errore ADO: 0x Origine: OraOLEDB Descrizione: ORA-01005: password non introdotta: connessione rifiutata Errore nativo: Errore nel file C:\Users\danilo\AppData\Local\Temp\CrystalReportLavoriAperti {2E46C8B1-92ED-4345-B9C8-28F134D11F70}.rpt: Impossibile collegarsi: accesso ai parametri non corretto.

Ho poi provato a seguire le istruzioni dell'altro thread con il codice, però ho un errore nella dichiarazione dei tipi ReportDocument e TableLogOnInfo : "Tipo RecordDocument non definito". Devo aggiungere dei riferimenti al mio progetto ?

danilolc Profilo | Newbie

Dunque, sembra che abbia risolto il problema con il seguente codice :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il problema è che se faccio il refresh della pagina mi riappare il solito odiato form che mi richiede i parametri di connessione al db...

danilolc Profilo | Newbie

Sembra che abbia risolto !

Ho sbagliato l'evento in cui mettevo il codice di cui sopra ...

freeteo Profilo | Guru

ok, mi sembrava strano infatti che non funzionasse
Cmq se puoi dare una descrizione anche sommaria della soluzione può tornare sempre utile a qualcuno magari, grazie.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

danilolc Profilo | Newbie

Praticamente ho fatto in questo modo :

Ho creato un report .rpt con il wizard di Crystal Report impostando per bene tutti dati che mi interessava avere.

Poi ho aggiunto un ReportViewer nella pagina web in cui volevo visualizzare il report, senza utilizzare nessun CrystalReportSource, altrimenti una volta caricata la pagina web mi venivano sempre richiesti i dati di connessione al mio db oracle (e questo era il mio problema originario da risolvere...).

Per risolvere il problema della connessione al db, ho quindi provveduto a scrivere il seguente codice :

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
...
...
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim Rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
Dim Cred As New TableLogOnInfo

Rpt.Load(Server.MapPath("CrystalReportLavoriAperti.rpt"), CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault)
Cred.ConnectionInfo.ServerName = "NOME_SERVER"
Cred.ConnectionInfo.UserID = "UserName"
Cred.ConnectionInfo.Password = "UserPassword"
Cred.ConnectionInfo.DatabaseName = "DatabaseName"

CrystalReportViewer1.LogOnInfo.Add(Cred)
CrystalReportViewer1.ReportSource = Rpt

End Sub

In questo modo una volta caricata la pagina web, questa non chiede più i parametri di connessione, dato che questi vengono passati da codice.

Grazie per l'aiuto!
Ciao!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5