string connStr = ConfigurationSettings.AppSettings["lj"].ToString(); //从web.cofig获取连接字符
SqlDataSource datasource = new SqlDataSource(connStr, "select * from yang");
ReportDocument doc = new ReportDocument();
TableLogOnInfo logininfo = new TableLogOnInfo();
string path;
path = Server.MapPath("report1.rpt");
doc.Load(path);
//a, b, c, d从web.cofig获取强制连接的服务器,库,用户,密码,主要用来强制连接
string a, b, c, d;
a = System.Configuration.ConfigurationManager.AppSettings[0];
b = System.Configuration.ConfigurationManager.AppSettings[1];
c = System.Configuration.ConfigurationManager.AppSettings[2];
d = System.Configuration.ConfigurationManager.AppSettings[3];
logininfo.ConnectionInfo.ServerName = a;
logininfo.ConnectionInfo.DatabaseName = b;
logininfo.ConnectionInfo.UserID = c;
logininfo.ConnectionInfo.Password = d; try
{
doc.Database.Tables[0].ApplyLogOnInfo(logininfo);
doc.Database.Tables[0].SetDataSource(datasource.Select(DataSourceSelectArguments.Empty));
CrystalReportViewer1.ReportSource = doc;
}
catch
{
Response.Write("<script>alert('输出报表失败,请检查输入信息或网络!');</script>");
}参考一下。那个登陆主要是强制连接数据库试试。那代码可以加到你的代码里。
Report.Load(Server.MapPath("CrystalReport1.rpt"));
//设置按名称指定的表的 TableLogOnInfo 对象。
TableLogOnInfo logOnInfo = new TableLogOnInfo(); //对报表中的每个表进行循环
//报表中数据集的Table 对象的个数
for(int i=0;i<Report.Database.Tables.Count;i++)
{
// 为报表中的表设置连接信息。
// 设置服务器或 ODBC 数据源名称、数据库名称、
logOnInfo.ConnectionInfo.ServerName = "(local)";
logOnInfo.ConnectionInfo.DatabaseName = "cnet"; logOnInfo.ConnectionInfo.UserID = "sa";
logOnInfo.ConnectionInfo.Password = "821217";
Report.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
}
rptvew.ReportSource = Report;
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
this.rptvew.DataBind();
base.OnInit(e);
}
我的方法 是 不用密码
CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
CrystalReportSource1.DataBind();
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportSource1.DataBind()
呵呵 简单好用