Bonjour à tous.
Dans une appli web, plusieurs rapports crystal existent. Ceux-ci ont été fait à des fins d'impression propre. Un moteur spécifique à donc été implémenté afin d'alimenter les rapports de façon générique. Sur le serveur de dév, tout marche bien, comme d'habitude
Lors de la phase de tests, un serveur SQL a été monté, un serveur IIS, .... Et là, catastrophe, les rapports devant accéder à SQL ne marchent plus.
Dans le code du moteur, je fais pourtant bien la liaison à la nouvelle base de données qui est correctement renseigné (fichier udl à l'appui pour vérifier, on ne sait jamais...). En fait, ce qui ne parmche pas, ce sont tous les paramètres discrets du rapport qui ne sont pas du type chaine. L'erreur ramenée est la suivante :
Citation:
|
Echec de l'ouverture d'un jeu de lignes. Détails ADO Error Code: 0x Source: Microsoft OLE DB Provider for SQL Server Description: La procédure 'Commentaire_Lister' attend le paramètre '@_iOrigineID' qui n'a pas été fourni. SQL State: 42000 native Error: Echec de l'ouverture d'un jeu de lignes. Erreur dans le fichier D:\DOCUME~1\naliq\LOCALS~1\Temp\CommentaireImprimer {AF55DD40-1980-4C02-D1770BF62E5}.rpt : Echec de l'ouverture d'un jeu de lignes.
|
Le pire, c'est que si je revient sur l'ancien serveur SQL sans modifier le code, cela marche.
Quelqu'un a-t-il une idée ? Merci d'avance.
Voici le source :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| public partial class Rapports_Impression : System.Web.UI.Page
{
private ReportDocument m_rptRapport = NULL;
Hashtable m_hashParametres
{
get
{
IF (ViewState["Parametres"] != NULL && ViewState["Parametres"] IS Hashtable)
{
RETURN (Hashtable)ViewState["Parametres"];
}
else
{
RETURN NULL;
}
}
SET { ViewState["Parametres"] = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
ConfigureCrystalReports();
}
private void ConfigureCrystalReports()
{
m_rptRapport = new ReportDocument();
string strNomPhysiqueRapport = Server.MapPath(Request.QueryString[Constantes.Requete.NomRapport]);
m_rptRapport.LOAD(strNomPhysiqueRapport);
//Connexion à la bonne base de données
ConnexionBD();
IF (m_hashParametres == NULL)
{
//ON récupère les données de la session
m_hashParametres = (Hashtable)Session[Constantes.Session.ParametreCrystal];
//ON supprime l'objet de la session
Session.Remove(Constantes.Session.ParametreCrystal);
}
SetCurrentValuesForParameterField();
//Affectation de la vue.
m_rptvwRapport.ReportSource = m_rptRapport;
}
private void SetCurrentValuesForParameterField()
{
foreach (DictionaryEntry deParametre in m_hashParametres)
{
m_rptRapport.SetParameterValue(deParametre.Key.ToString(), deParametre.Value);
}
}
private void ConnexionBD()
{
//Paramètres de connexion à la base de données
//Récupération de la chaine de connexion
SqlConnection scnxConnexion = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
m_rptvwRapport.ReportSource = m_rptsrcOrigine;
//Passage des informations de connexion au rapport
SqlConnectionStringBuilder scnxstrbldConnexion = new SqlConnectionStringBuilder(scnxConnexion.ConnectionString);
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = scnxstrbldConnexion.DataSource;
connectionInfo.DatabaseName = scnxstrbldConnexion.InitialCatalog;
connectionInfo.UserID = scnxstrbldConnexion.UserID;
connectionInfo.Password = scnxstrbldConnexion.Password;
connectionInfo.IntegratedSecurity = false;
SetDBLogonForReport(connectionInfo, m_rptRapport);
SetDBLogonForSubreports(connectionInfo, m_rptRapport);
}
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
Tables tables = reportDocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
}
}
private void SetDBLogonForSubreports(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
Sections sections = reportDocument.ReportDefinition.Sections;
foreach (Section section in sections)
{
ReportObjects reportObjects = section.ReportObjects;
foreach (ReportObject reportObject in reportObjects)
{
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
SubreportObject subreportObject = (SubreportObject)reportObject;
ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
SetDBLogonForReport(connectionInfo, subReportDocument);
}
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
//Récupération des imprimantes
if (!Page.IsPostBack)
{
m_cmbNomImprimante.DataSource = System.Drawing.Printing.PrinterSettings.InstalledPrinters;
m_cmbNomImprimante.DataBind();
}
}
}
} |