0

我在 asp.net 中做了一个水晶报告。我的数据库是 MS-Access 2007。我使用数据集将报表与数据库连接起来。现在,当我执行程序时,它会给出错误“数据库登录失败”。

如何解决这个问题呢 ...

请帮忙..

问候阿布舍克

4

3 回答 3

0

我不知道你如何连接数据集。从您的帖子中,我假设您可能正在填充数据集并使用此数据集与报告进行数据绑定。

在这种情况下,您应该为数据集中的表提供名称。

数据集中表的名称必须与设计报表的表或视图完全匹配。否则水晶报表将无法找到它。

ds.Tables[0].Name="yourTableorViewNameHere";

您还需要为您的报告提供登录信息。

private void myLogonInfo(CrystalDecisions.CrystalReports.Engine.ReportDocument myReport)
{
    TableLogOnInfo logOnInfo = new TableLogOnInfo();

    string server = "MyServer";
    string userID = "User1";
    string passwd = "MyPw";
    string DBNAME = "MyDB";

    int i = 0;
    for (i = 0; i <= myReport.Database.Tables.Count - 1; i++)
    {
        logOnInfo.ConnectionInfo.ServerName = server;
        logOnInfo.ConnectionInfo.UserID = userID;
        logOnInfo.ConnectionInfo.Password = passwd;
        logOnInfo.ConnectionInfo.DatabaseName = DBNAME;
        myReport.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
    }
}

编辑

这是初始化报告的代码

private void ShowRep(dataset ds)
{
ReportDocument rptDoc = new ReportDocument();
rptDoc.Load(Server.MapPath("MyReport.rpt"));

//either assign the dataset to the report here
rptDoc.SetDataSource(ds);

//or provide the login details
//myLogonInfo(rptDoc);

//assign record filtering here
//rptDoc.RecordSelectionFormula = "{RDNewCollections.tdate}>=" + GetCrystalDate(ffdt.Text) ;

// set some report parameters
rptDoc.SetParameterValue(0, ffdt.Text);
rptDoc.SetParameterValue(1, tdt.Text);

//finally assign the report to the reportviewer
Crv.ReportSource = rptDoc;

}

您可以从页面加载中调用它。

如果您使用的是数据集,则无需传递 logonifo。如果您不使用数据集,则必须调用 logoninfo。

于 2012-04-16T05:36:00.797 回答
0
ReportDocument rptDoc = new ReportDocument();

rptDoc.Load(Server.MapPath("~/Report/[your-report].rpt"));
rptDoc.SetParameterValue(0, [your-param]);
rptDoc.SetDatabaseLogon(username, password); --> this will solve your issue
于 2021-10-06T16:57:35.823 回答
-1

使用 Access 打开您的 db 文件,然后转到选项,然后转到客户端。

之后它将起作用。

于 2016-03-31T18:27:39.883 回答