0

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

谢谢你的时间 :)

4

2 回答 2

0

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

我所做的是这样的:

 CrystalReportViewer1.EnableDatabaseLogonPrompt = false;

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

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

于 2012-10-25T18:36:16.457 回答
0

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

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

于 2012-10-25T08:01:31.060 回答