c# - reports - no se pudo abrir la conexion crystal report
Crystal Report supera el límite de procesamiento de trabajos (1)
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
if (IsPostBack)
{
if (dllselection.SelectedValue == "3")
{
ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(Server.MapPath("OJT.rpt"));
myDataReport.SetDatabaseLogon("intranet", "cpgintranet@2016", "192.168.2.5", "INTRANET");
myDataReport.SetParameterValue("T-ID", TextBox1.Text);
CrystalReportViewer1.ReportSource = myDataReport;
CrystalReportViewer1.DataBind();
}
else if (dllselection.SelectedValue == "4")
{
ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(Server.MapPath("TEFF.rpt"));
myDataReport.SetDatabaseLogon("intranet", "cpgintranet@2016", "192.168.2.5", "INTRANET");
myDataReport.SetParameterValue("T-ID", TextBox1.Text);
CrystalReportViewer1.ReportSource = myDataReport;
CrystalReportViewer1.DataBind();
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
if (dllselection.SelectedValue == "3")
{
ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(Server.MapPath("OJT.rpt"));
myDataReport.SetDatabaseLogon("intranet", "abc@2016", "192.168.2.88", "INTRANET");
myDataReport.SetParameterValue("T-ID", TextBox1.Text);
CrystalReportViewer1.ReportSource = myDataReport;
CrystalReportViewer1.DataBind();
}
else if (dllselection.SelectedValue == "4")
{
ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
myDataReport.Load(Server.MapPath("TEFF.rpt"));
myDataReport.SetDatabaseLogon("intranet", "abc@2016", "192.168.2.88", "INTRANET");
myDataReport.SetParameterValue("T-ID", TextBox1.Text);
CrystalReportViewer1.ReportSource = myDataReport;
CrystalReportViewer1.DataBind();
}
}
recibo un error:
Se alcanzó el límite máximo de trabajos de procesamiento de informes configurado por el administrador del sistema ".
Tras investigar el tema en línea, encontré una solución, establezca el valor de registro, específicamente HKEY_LOCAL_MACHINE/SOFTWARE/Business Objects/Suite 12.0/Report Application Server/InprocServer/PrintJobLimit
en "-1", pero esta solución no funciona, si agrego el informe de Crystal disponer y cerrar función en mi código, el informe de cristal que generé estará vacío. Debajo están mi código aspx:
<asp:DropDownList ID="dllselection" onchange="javascript:return dropdown(this);" runat="server" Style="border: groove" CssClass="form-control" AutoPostBack="true">
<asp:ListItem Text="On Job Training" Value="3"></asp:ListItem>
<asp:ListItem Text="Training Effectiveness Form" Value="4"></asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Generate" CssClass="btn btn-success" OnClick="Button1_Click" />
<div id="dvReport">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" ToolPanelView="None" EnableDatabaseLogonPrompt="False" PrintMode="Pdf" />
</div>
Sí, esto es por diseño. Hay una cantidad máxima de impresiones permitidas por el tiempo de ejecución de Crystal proporcionado para .net framework. La forma de garantizar que esto no ocurra es limpiar a fondo en el evento de descarga de la página.
Primero, promocione su ReportDocument (myDataReport) a un campo privado en la página detrás. Entonces podrá deshacerse del informe y luego establecerlo como nulo:
protected void Page_UnLoad(object sender, EventArgs e)
{
CrystalReportViewer1.Dispose();
CrystalReportViewer1 = null;
myDataReport.Close(); // I can''t remember if this is part of the reportDucment class
myDataReport.Dispose();
myDataReport = null;
GC.Collect(); // I forgot this line
}
Editar GC.Collect agregado
Puede decir que tiene este problema si va a% temp% (podría variar en su caso) habría múltiples copias de su informe con un GUID adjunto al nombre del archivo almacenado en la memoria caché, bórrelos todos antes de comenzar. Cuando ejecuta la limpieza anterior todas las veces, estos archivos no se acumulan.