C#Crystal报警警告您请求的报告需要更多信息

时间:2012-10-25 07:52:29

标签: c# logging input crystal-reports logonserver

我使用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();       
        }
    }
}

感谢您的时间:)

2 个答案:

答案 0 :(得分:0)

通常,您需要在直接从数据库创建报告文档时输入这些信息,这意味着您使用报告向导并从数据库中选择了一个表。报告文档本身包含该数据源的连接信息,但不保存登录信息。

要解决此问题,您可以先从要在报告中使用的数据库表中创建一个类型化数据集。然后创建一个报告文档并使用该向导将数据集(而不是直接数据库表)设置为报告的数据源。然后,您可以在代码中填充数据集,然后将其传递给报告。

答案 1 :(得分:0)

我今天碰到了这个,我收到错误的原因是因为我的服务器上没有安装正确的提供程序。

我做的是:

 CrystalReportViewer1.EnableDatabaseLogonPrompt = false;

这给了我一个新错误:登录失败。详细信息:ADO错误代码:0x源:ADODB.Connection描述:找不到提供程序。它可能没有正确安装

之后,我在报告中检查了OLE DB提供程序。安装SQL Native Client工具解决了这个问题。