我有一些客户需要链接到我们正在创建的ASP.NET应用程序的Crystal Reports。我有以下代码:
LINQDataContext dc = new LINQDataContext();
Order o = dc.Orders.Where(a => a.ID == long.Parse(Request.QueryString["OrderID"])).Single();
SqlConnectionStringBuilder bld = new SqlConnectionStringBuilder(dc.Connection.ConnectionString);
CrystalReportSource src = new CrystalReportSource();
src.ID = "test";
ConnectionInfo myConnectionInfo = new ConnectionInfo();
myConnectionInfo.ServerName = bld.DataSource;
myConnectionInfo.DatabaseName = bld.InitialCatalog;
myConnectionInfo.UserID = bld.UserID;
myConnectionInfo.Password = bld.Password;
src.Report.FileName = o.SalesPersonObject.GetType().GetProperty(Request.QueryString["DeliveryNoteType"]).GetValue(o.SalesPersonObject, null).ToString();
ParameterDiscreteValue param = new ParameterDiscreteValue();
param.Value = long.Parse(Request.QueryString["OrderID"]);
src.ReportDocument.ParameterFields[0].CurrentValues.Add(param);
CrystalReportViewer vw = new CrystalReportViewer();
src.ReportDocument.SetDatabaseLogon(bld.UserID, bld.Password);
vw.HasToggleGroupTreeButton = false;
vw.AutoDataBind = true;
vw.Height = 1268;
vw.Width = 1000;
vw.HasPrintButton = true;
vw.PrintMode = PrintMode.Pdf;
vw.ReportSource = src;
//vw.EnableDatabaseLogonPrompt = false;
vw.HasToggleParameterPanelButton = false;
vw.HasCrystalLogo = false;
vw.RefreshReport();
plcReport.Controls.Add(vw);
但是,即使我使用SetDatabaseLogon方法设置用户名/密码,我仍然会提示输入数据库登录详细信息,或者更具体地说是输入密码。我尝试过使用vw.EnableDatabaseLogonPrompt = true,但这会给我一个数据库登录问题。
有什么想法吗?
答案 0 :(得分:0)
对于您的连接,请使用OLE驱动程序;不要使用本机SQL驱动程序。不确定这是否是您当前的问题,但我的经验是,如果我使用本机驱动程序,它在开发中可以正常工作,但随后会提示在生产中登录。
答案 1 :(得分:0)
了解我是如何帮助另一位面临类似问题的 SO用户。我希望您能够获得有价值的内容。
答案 2 :(得分:0)
您可以尝试以下代码:
using CrystalDecisions;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
public partial class ClientsByOpeningDate : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ReportDocument rpt = new ReportDocument();
rpt.Load(Server.MapPath("ClientsByOpenDate.rpt"));
rpt.SetDatabaseLogon("myUserLogin", "mypassword", @"Server", "Database");
CrystalReportViewer1.ReportSource = rpt;
}
}
}