流到PDF错误(VS.NET 2005)(CR XI Release 2) [英] Stream to PDF Error (VS.NET 2005)(CR XI Release 2)
问题描述
你好。我正在使用VS.NET 2005和Crystal Reports XI Release 2(v11.5)。我正在尝试将PDF流回客户端。我必须将文件流回来的代码在CR10上工作正常,但是在CRXI中引发了运行时异常。当我声明内存流时,它是正确的。我已经包含了我的代码和我收到的运行时异常。运行时异常表明它是数据库登录失败,这是不正确的,因为我使用跟踪运行应用程序并看到它登录并执行正确的存储过程。过去3天我一直在努力解决这个错误,所以任何想法或输入都会有所帮助。
Hello. I am using VS.NET 2005 and Crystal Reports XI Release 2 (v11.5). I am trying to stream back a PDF to the client. The code that I have to stream the file back, works on CR10 fine, but throws a runtime exception with CRXI. It is right when I declare the memory stream. I have included my code and the runtime exception that I am receiving. The runtime exception says that it is a database logon failure, which is not true because I ran the app with trace and saw it login and execute the correct stored procedures. I have been struggling with this error for the past 3 days, so any thoughts or input would help.
谢谢。
Blake
代码
protected void LoadReport()
protected void LoadReport()
{
if (会话[ "ePowerQuoteFormID" ] == null )
if (Session["ePowerQuoteFormID"] == null)
{
Label1.Text = "错误!" ;
Label1.Text = "Error!";
Label2.Text = "找不到您的参考ID。" ;
Label2.Text = "Your reference ID could not be found.";
return ;
return;
}
string id = Session [ "ePowerQuoteFormID" ]。ToString();
string id = Session["ePowerQuoteFormID"].ToString();
string reportPath ;
string reportPath;
SqlConnection conn = new SqlConnection ();
SqlConnection conn = new SqlConnection();
DataSet ds = new < FONT size = 2> DataSet ();
DataSet ds = new DataSet();
string strESID = "" ;
string strESID = "";
SqlParameter ePowerQuoteFormID = new SqlParameter ();
SqlParameter ePowerQuoteFormID = new SqlParameter();
ePowerQuoteFormID.ParameterName = "@ EPowerQuoteFormID" ;
ePowerQuoteFormID.ParameterName = "@EPowerQuoteFormID";
ePowerQuoteFormID.Value = id;
ePowerQuoteFormID.Value = id;
if ( ConfigurationManager .AppSettings [ "ProgramMode" ] == "debug" )
if (ConfigurationManager.AppSettings["ProgramMode"] == "debug")
{
reportPath = ConfigurationManager .AppSettings [ "debugReportPath" ];
reportPath = ConfigurationManager.AppSettings["debugReportPath"];
}
else
else
{
reportPath = ConfigurationManager .AppSettings [ "prodReportPath" ];
reportPath = ConfigurationManager.AppSettings["prodReportPath"];
}
crReportDocument.Load(reportPath);
crReportDocument.Load(reportPath);
// =========================== Connection === ========= ==========================
// =========================== Connection ======================================
if ( ConfigurationManager .AppSettings [ "ProgramMode" ] == "debug" )
if (ConfigurationManager.AppSettings["ProgramMode"] == "debug")
{
crConnectionInfo.ServerName = ConfigurationManager .AppSettings [ "DebugServerName" ];
crConnectionInfo.ServerName = ConfigurationManager.AppSettings["DebugServerName"];
crConnectionInfo.DatabaseName = ConfigurationManager .AppSettings [ "DebugDatabaseName" ];
crConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["DebugDatabaseName"];
conn.ConnectionString = ConfigurationManager < FONT size = 2> .AppSettings [ "debugConn" ];
conn.ConnectionString = ConfigurationManager.AppSettings["debugConn"];
}
else
else
{
crConnectionInfo.ServerName = ConfigurationManager .AppSettings [ "ServerName" ];
crConnectionInfo.ServerName = ConfigurationManager.AppSettings["ServerName"];
crConnectionInfo.DatabaseName = ConfigurationManager .AppSettings [ "DatabaseName" ];
crConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["DatabaseName"];
conn.ConnectionString = ConfigurationManager .AppSettings [ "productionConn" ];
conn.ConnectionString = ConfigurationManager.AppSettings["productionConn"];
}
ds = SqlHelper .ExecuteDataset(conn, CommandType .StoredProcedure, ConfigurationManager .AppSettings [ "storedProcGetESIDs"
ds = SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure, ConfigurationManager.AppSettings["storedProcGetESIDs"], ePowerQuoteFormID);
crConnectionInfo.UserID = "user" ;
crConnectionInfo.UserID = "user";
crConnectionInfo.Password = "xxxxxxxxx" ;
crConnectionInfo.Password = "xxxxxxxxx";
crDatabase = crReportDocument.Database;
crDatabase = crReportDocument.Database;
crTables = crDatabase.Tables;
crTables = crDatabase.Tables;
for ( int i = 0;我< crTables.Count; i ++)
for (int i = 0; i < crTables.Count; i++)
{
crTable = crTables ;
crTable = crTables;
crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
crTable。 ApplyLogOnInfo(crTableLogOnInfo);
crTable.ApplyLogOnInfo(crTableLogOnInfo);
}
crReportDocument.SetParameterValue( "ePowerQuoteFormID" ,id);
crReportDocument.SetParameterValue("ePowerQuoteFormID", id);
crReportDocument.SetParameterValue( "SubePowerQuoteFormID" < FONT size = 2>,id);
crReportDocument.SetParameterValue("SubePowerQuoteFormID", id);
crReportDocument.SetParameterValue( "chkTXU" ,sUnchecked);
crReportDocument.SetParameterValue("chkTXU", sUnchecked);
crReportDocument.SetParameterValue( "chkAEP" ,sUnchecked) ;
crReportDocument.SetParameterValue("chkAEP", sUnchecked);
crReportDocument.SetParameterValue( "chkCenterPoint" ,sUnchecked);
crReportDocument.SetParameterValue("chkCenterPoint", sUnchecked);
crReportDocument.SetParameterValue( "chkTNMP" ,sUnchecked);
crReportDocument.SetParameterValue("chkTNMP", sUnchecked);
crReportDocument.SetParameterValue( "chkSharyland" ,sUnchecked);
crReportDocument.SetParameterValue("chkSharyland", sUnchecked);
crReportDocument.SetParameterValue( "chkEntergyTexas" ,sUnchecked);
crReportDocument.SetParameterValue("chkEntergyTexas", sUnchecked);
for ( int i = 0;我< ds.Tables [0] .Rows.Count; i ++)
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
strESID = ds.Tables [0] .Rows [ "ESID" ]。ToString();
strESID = ds.Tables[0].Rows["ESID"].ToString();
if ((strESID.StartsWith( " 1044372" ))||(strESID.StartsWith( "101769" )) )
if ((strESID.StartsWith("1044372")) || (strESID.StartsWith("101769")))
crReportDocument.SetParameterValue( "chkTXU" ,sChecked);
crReportDocument.SetParameterValue("chkTXU", sChecked);
if ((strESID.StartsWith( "100327" ))|| strESID.StartsWith( "102040" ))
if ((strESID.StartsWith("100327")) || strESID.StartsWith("102040"))
crReportDocument.SetParameterValue( "chkAEP" ,sChecked);
crReportDocument.SetParameterValue("chkAEP", sChecked);
if (strESID.St artsWith( "100890" ))
if (strESID.StartsWith("100890"))
crReportDocument.SetParameterValue( "chkCenterPoint" ,sChecked);
crReportDocument.SetParameterValue("chkCenterPoint", sChecked);
if (strESID.StartsWith( "104005" ))
if (strESID.StartsWith("104005"))
crReportDocument.SetParameterValue( "chkTNMP" ,sChecked);
crReportDocument.SetParameterValue("chkTNMP", sChecked);
}
MemoryStream oStream =( MemoryStream )crReportDocument.ExportToStream(CrystalDecisions.Shared。 ExportFormatType .HTML32);
MemoryStream oStream = (MemoryStream)crReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.HTML32);
Response.ClearContent();
Response.ClearContent();
Response.ClearHeaders();
Response.ClearHeaders();
Response.ContentType = "application / pdf" ;
Response.ContentType = "application/pdf";
Response.BinaryWri te(oStream.ToArray());
Response.BinaryWrite(oStream.ToArray());
Response.End();
Response.End();
}
推荐答案
不清楚为什么要创建DS然后将报告登录信息设置到服务器?
Not clear why you are creating a DS and then setting the report logon info to the Server?
以下是示例代码做同样的事情,而不是PDF,所以只需进行更改,先将其保存到磁盘,然后将文件流式传输给用户:
Here's sample code to do the same, not for PDF so just make the changes, save it to disk first and then stream the file to the user:
private void ExportToStream_Click(object sender, EventArgs e)
{
CrystalDecisions.Shared.MicrosoftMailDestinationOptions mailOpts = CrystalDecisions.Shared.ExportOptions.CreateMicrosoftMailDestinationOptions();
CrystalDecisions.Shared.DiskFileDestinationOptions diskOpts = CrystalDecisions.Shared.ExportOptions.CreateDiskFileDestinationOptions();
CrystalDecisions.Shared.ExportOptions exportOpts = new CrystalDecisions.Shared.ExportOptions();
CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions csvExpOpts = new CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions();
CrystalDecisions.Shared.HTMLFormatOptions HTMLExpOpts = new CrystalDecisions.Shared.HTMLFormatOptions();
rpt.Load(@"c:\reports\b.rpt");
//diskOpts.DiskFileName = "c:\\ReportName.csv";
diskOpts.DiskFileName = @"c:\tmp\html\b.html";
exportOpts.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
//exportOpts.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.CharacterSeparatedValues;
exportOpts.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.HTML32;
exportOpts.ExportDestinationOptions = diskOpts;
//csvExpOpts = new CharacterSeparatedValuesFormatOptions();
//csvExpOpts.GroupSectionsOption = CsvExportSectionsOption.Export;
//csvExpOpts.ReportSectionsOption = CsvExportSectionsOption.Export;
//csvExpOpts.SeparatorText = ",";
//csvExpOpts.Delimiter = "|";
HTMLExpOpts = new HTMLFormatOptions();
//HTMLExpOpts.HTMLFileName = @"c:\tmp\html\phonebook report that looks real purdy.html";
HTMLExpOpts.HTMLBaseFolderName = @"c:\tmp\html\b.html";
HTMLExpOpts.HTMLEnableSeparatedPages = false;
HTMLExpOpts.UsePageRange = false;
HTMLExpOpts.HTMLHasPageNavigator = false;
System.IO.Stream oStream;
byte[] byteArray = null;
//oStream = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.CharacterSeparatedValues);
oStream = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.HTML32);
byteArray = new byte[oStream.Length];
oStream.Read(byteArray, 0, Convert.ToInt32(oStream.Length - 1));
// this is used to verify the file so I saved it to disk
System.IO.File.Create(diskOpts.DiskFileName, Convert.ToInt32(oStream.Length - 1)).Close();
System.IO.File.OpenWrite(diskOpts.DiskFileName).Write(byteArray, 0, Convert.ToInt32(oStream.Length - 1));
System.IO.File.SetAttributes(diskOpts.DiskFileName, System.IO.FileAttributes.Directory);
oStream.Close();
GC.Collect();
MessageBox.Show("Export to Stream complete", "RAS", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
请务必同时应用所有最新补丁。
Be sure to apply all of the latest patches as well.
Don
这篇关于流到PDF错误(VS.NET 2005)(CR XI Release 2)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!