流到PDF错误(VS.NET 2005)(CR XI Release 2) [英] Stream to PDF Error (VS.NET 2005)(CR XI Release 2)

查看:74
本文介绍了流到PDF错误(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" ],ePowerQuoteFormID);

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆