0

C#.NET (WebApp) VS 2008 SP1 を使用しています

Crystal Report v.10.5.3700(Framework 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

通常、これらの情報は、レポート ドキュメントをデータベースから直接作成した場合、つまり、レポート ウィザードを使用してデータベースからテーブルを選択した場合に入力する必要があります。レポート ドキュメント自体には、そのデータ ソースへの接続情報が含まれていますが、ログオン情報は保存されません。

これを克服するために、レポートで使用したいデータベース テーブルから型指定されたデータセットを最初に作成することができます。次に、レポート ドキュメントを作成し、ウィザードを使用してデータセット (データベース テーブルを直接ではなく) をレポートのデータ ソースとして設定します。次に、コードでデータセットを埋めて、それをレポートに渡すだけです。

于 2012-10-25T08:01:31.060 に答える
0

今日、これに遭遇しました。エラーが発生した理由は、サーバーに正しいプロバイダーがインストールされていなかったためです。

私がしたことはこれでした:

 CrystalReportViewer1.EnableDatabaseLogonPrompt = false;

これにより、新しいエラーが発生しました:ログオンに失敗しました。詳細: ADO エラー コード: 0x ソース: ADODB.Connection 説明: プロバイダーが見つかりません。正しくインストールされていない可能性があります

その後、レポートで OLE DB プロバイダーを確認しました。SQL Native Client ツールをインストールすると、問題が修正されました。

于 2012-10-25T18:36:16.457 に答える