我使用C#.NET(WebApp)VS 2008 SP1
我想从水晶报告v.10.5.3700(框架3.5)点击下一页,但它显示下一页的输入数据
您要求的报告需要更多信息
服务器名称:
数据库名称:
用户名:
密码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Transactions;
using System.Drawing;
using System.Globalization;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using CrystalDecisions.Web;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
namespace testReport
{
public partial class _cldClass : System.Web.UI.Page
{
SqlConnection objConn = new SqlConnection();
SqlCommand objCmd = new SqlCommand();
SqlDataAdapter dtAdapter = new SqlDataAdapter();
SqlConnection Conn;
DataSet ds = new DataSet();
DataTable dt = null;
string strConnString = WebConfigurationManager.ConnectionStrings["connDB"].ConnectionString;
string strSQL = null;
public string userDB
{
get { return WebConfigurationManager.AppSettings["userDB"]; }
}
public string pwdDB
{
get { return WebConfigurationManager.AppSettings["pwdDB"]; }
}
public string srvDB
{
get { return WebConfigurationManager.AppSettings["srvDB"]; }
}
public string dbName
{
get { return WebConfigurationManager.AppSettings["dbName"]; }
}
//protected void Page_Load(object sender, EventArgs e)
//{
//}
protected void Page_Init(object sender, EventArgs e)
{
TextBox2.Text = DateTime.Now.ToString("yyyy-MM-dd", new CultureInfo("en-US"));
Conn = new SqlConnection(strConnString);
Conn.Open();
if (Conn.State == ConnectionState.Open)
{
this.Label1.Text = "Connected";
}
else
{
this.Label1.Text = "Connect Failed";
}
}
protected void Button2_Click(object sender, EventArgs e)
{
strSQL = "SELECT * FROM fTime WHERE fDate='" + TextBox2.Text + "'";
objConn.ConnectionString = strConnString;
var _with1 = objCmd;
_with1.Connection = objConn;
_with1.CommandText = strSQL;
_with1.CommandType = CommandType.Text;
dtAdapter.SelectCommand = objCmd;
dtAdapter.Fill(ds, "cReport");
dt = ds.Tables[0];
dtAdapter = null;
objConn.Close();
objConn = null;
ReportDocument rpt = new ReportDocument();
rpt.Load(Server.MapPath("Report\\CrystalReport.rpt"));
rpt.SetDataSource(dt);
rpt.SetDatabaseLogon(userDB, pwdDB, srvDB, dbName);
CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.RefreshReport();
}
}
}
感谢您的时间:)
答案 0 :(得分:0)
通常,您需要在直接从数据库创建报告文档时输入这些信息,这意味着您使用报告向导并从数据库中选择了一个表。报告文档本身包含该数据源的连接信息,但不保存登录信息。
要解决此问题,您可以先从要在报告中使用的数据库表中创建一个类型化数据集。然后创建一个报告文档并使用该向导将数据集(而不是直接数据库表)设置为报告的数据源。然后,您可以在代码中填充数据集,然后将其传递给报告。
答案 1 :(得分:0)
我今天碰到了这个,我收到错误的原因是因为我的服务器上没有安装正确的提供程序。
我做的是:
CrystalReportViewer1.EnableDatabaseLogonPrompt = false;
这给了我一个新错误:登录失败。详细信息:ADO错误代码:0x源:ADODB.Connection描述:找不到提供程序。它可能没有正确安装
之后,我在报告中检查了OLE DB提供程序。安装SQL Native Client工具解决了这个问题。