Crystal Report: Accesso al database non riuscito

lunedì 21 marzo 2011 - 21.19
Tag Elenco Tags  C#  |  .NET 2.0  |  .NET 4.0  |  Windows XP  |  Visual Studio 2010  |  SQL Server 2008

niccord Profilo | Newbie

Salve a tutti.
Ho sviluppato un'applicazione Windows in C# con Visual Studio 2010.
L'applicazione elabora dati presenti su un database SQLServer 2008 e prevede la generazione di report in Pdf o in Excel che, purtroppo però, non funzionano perché Crystal Report mi ritorna un errore.
Ho sviluppato i report su Visual Studio scaricando il pacchetto CRforVS_13_0.exe (SAP Crystal Reports per Visual Studio 2010).
I report non si collegano direttamente alla sorgente dati ma ricevono i dati tramite un DataSet da me preventivamente caricato.
Ho sviluppato l'applicazione su Windows XP a 32 bit.
Compilo ogni progetto a 32 bit (x86) perché so che altrimenti la situazione poteva essere problematica.

La chiamata che effettuo è questa:

// questo metodo è chiamato dalla maschera
public void printRichieste(DataSet[] dsData, ExportFormatType type)
{
//printRich è il file rpt del report
generaReport<printRich>(dsData, "StampaRichieste", type);
}

private void generaReport<T>(DataSet[] dsData, string filename, ExportFormatType exportFormat) where T : ReportClass, new()
{
T printPdf = new T();

// tentativo 1
//foreach (DataSet ds in dsData)
//{
// printPdf.Database.Tables[ds.Tables[0].TableName].SetDataSource(ds.Tables[0]);
//}

// tentativo 2
//for (int i = 0; i < dsData.Length; i++)
//{
// printPdf.Database.Tables[i].SetDataSource(dsData[i].Tables[0]);
//}

// tentativo 3
printPdf.SetDataSource(dsData[0]);

//codice omesso

//esporto la stampa nella cartella utente
string fileUtente = "C:\\Stampe\\" + filename + ".pdf";

printPdf.ExportToDisk(exportFormat, fileUtente);
printPdf.Close();
}

Ho provato a variare il "modo" in cui passo i dati al report: in ogni caso ottengo sempre lo stesso errore.

Ho "preso spunto" da codice che uso quotidianamente al lavoro e che so di per certo funzionare, su Visual Studio 2005 e Crystal Report 2005.
Ho anche provato ad impostare, in ogni progetto, il .NET Framework alla versione 2 invece che alla 4, ma non è cambiato nulla.

Ho provato ad aggiungere tutti i riferimenti che mi parevano necessari o, al più, plausibili ovvero (aiutandomi col codice funzionante):
AxInterop.AcroPDFLib
crdb_adoplus
CrystalDecisions.CrystalReports.Design
CrystalDecisions.CrystalReports.Rengine
CrystalDecisions.Enterprise.Viewing.ReportSource
CrystalDecisions.ReportAppServer.DataSetConversion
CrystalDecisions.ReportSource
CrystalDecisions.Shared
CrystalDecisions.Windows.Forms
Interop.AcroPDFLib
Microsoft.ReportViewer.WinForms

Ecco un po' di informazioni sull'errore in questione:

Titolo della finestra dell'eccezione: "LogOnException è stata individuata"
Message: "Accesso al Database non riuscito"
ErrorID: "CrystalDecisions.CrystalReports.Engine.EngineExceptionErrorID.LogOnFailed"
Source: "CrystalDecisions.ReportAppServer.DataSetConversion"

La InnerException ha questi campi:
Source: "Analysis Server"
Stack Trace:
" in CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext)
in CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)"

Se qualcuno ha qualche suggerimento è ben accetto. (sono abbastanza disperato )
Grazie.

freeteo Profilo | Guru

Ciao,
potrebbe essere un problema di questo tipo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=5303
riesci a fare qualche prova per capire se è questo?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

niccord Profilo | Newbie

Per ora non ho provato come mi hai suggerito perché Crystal Report non l'ho collegato a nessuna sorgente dati, ma sono io che passo al report dei dataset già popolati.
Comunque ho risolto portando tutto su Visual Studio 2005.
Non so sinceramente cosa sia cambiato..però qui tutto va.
Grazie.

freeteo Profilo | Guru

Ciao niccord,
effettivamente usando Vs2005 di fatto vai ad usare librerie diverse (il runtime è in .net tral'altro) quindi a parte il fatto di aver probabilmente fixato bug che c'erano, gestiscono la memoria in maniera diversa e migliore, rispetto magari ad una versione COM basata quindi su OCX.

Bene dai, in qualche modo insomma sei riuscito a sistemare il problema...è una buona notizia

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

niccord Profilo | Newbie

A dire la verità sono passato da Visual Studio 2010 a Visual Studio 2005...è questo il bello!
In ogni caso ho risolto...grazie.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5