使用数据集时无法正确绑定晶体报告,显示缺少参数

use*_*238 5 vb.net asp.net xsd dataset crystal-reports

我有水晶报告,当我DSN用作数据源时工作正常.问题是我现在正在使用数据集.数据集包含我需要的所有表,并使用存储过程从数据库填充数据.但是,通过这种方式,它会抛出一个错误:" Missing Parameters".

我正在做如下:
第1步:创建Dataset1.xsd并使用data connections插入tables数据库中所有必需的.
步骤2:给data source使用报告database expert作为Dataset1.xsd
步骤3:使用在数据集存储过程填充数据,然后创建的实例Dataset1和合并来自数据集的数据Dataset 1实例.

我的代码从数据库中获取数据然后将其合并到Dataset1实例并将其作为源文件提供给crystal报告如下:

Private Sub ReportByDataset(ByVal rptDoc As CrystalDecisions.CrystalReports.Engine.ReportDocument)

    'new code

    Dim myConnection As New SqlClient.SqlConnection()
    'myConnection.ConnectionString = "server= (local)\NetSDK;database=pubs;Trusted_Connection=yes"
    Dim ds As New DataSet1

    myConnection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("HighriseContractingWebConnectionString").ConnectionString
    myConnection.Open()
    Dim MyCommand As New SqlClient.SqlCommand()
    MyCommand.Connection = myConnection

    MyCommand.CommandText = "SP_Web_GetReportTables"
    MyCommand.CommandType = CommandType.StoredProcedure
    Dim MyDA As New SqlClient.SqlDataAdapter()
    MyDA.SelectCommand = MyCommand
    Dim myDS As New DataSet

    MyDA.Fill(myDS)
    myConnection.Close()


    ds.Tables("RABill_RPT").Merge(myDS.Tables(0), MissingSchemaAction.Ignore)
    myDS.Tables(0).Reset()
    ds.Tables("RA_bills").Merge(myDS.Tables(1), MissingSchemaAction.Ignore)
    ds.Tables("Work_Completion").Merge(myDS.Tables(2), MissingSchemaAction.Ignore)
    ds.Tables("contractor").Merge(myDS.Tables(3), MissingSchemaAction.Ignore)
    ds.Tables("WO_Header").Merge(myDS.Tables(4), MissingSchemaAction.Ignore)
    ds.Tables("Project").Merge(myDS.Tables(5), MissingSchemaAction.Ignore)
    ds.Tables("contractor_1").Merge(myDS.Tables(6), MissingSchemaAction.Ignore)
    ds.Tables("Users").Merge(myDS.Tables(7), MissingSchemaAction.Ignore)
    ds.Tables("Users_Approved").Merge(myDS.Tables(8), MissingSchemaAction.Ignore)
    ds.Tables("voucher").Merge(myDS.Tables(9), MissingSchemaAction.Ignore)
    ds.Tables("Employee_Approve").Merge(myDS.Tables(10), MissingSchemaAction.Ignore)
    ds.Tables("Employee").Merge(myDS.Tables(11), MissingSchemaAction.Ignore)
    ds.Tables("Account").Merge(myDS.Tables(12), MissingSchemaAction.Ignore)
    ds.Tables("TDS").Merge(myDS.Tables(13), MissingSchemaAction.Ignore)
    ds.Tables("WO_Detail").Merge(myDS.Tables(14), MissingSchemaAction.Ignore)
    ds.Tables("V_WO_BlockTaskNo").Merge(myDS.Tables(15), MissingSchemaAction.Ignore)
    ds.Tables("TASK").Merge(myDS.Tables(16), MissingSchemaAction.Ignore)
    ds.Tables("Cont_Voucher").Merge(myDS.Tables(17), MissingSchemaAction.Ignore)
    ds.Tables("Cont_Voucher_1").Merge(myDS.Tables(17), MissingSchemaAction.Ignore)
    ds.Tables("Cont_Voucher_2").Merge(myDS.Tables(17), MissingSchemaAction.Ignore)
    ds.Tables("Company").Merge(myDS.Tables(18), MissingSchemaAction.Ignore)


    ''new code ends


    rptDoc.SetDataSource(ds)
    CRReport.HasCrystalLogo = False
    CRReport.HasToggleGroupTreeButton = False
    CRReport.ReportSource = rptDoc
    CRReport.DataBind()

End Sub
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我错过了什么.同样的工作正常使用DSN 它不是参数的问题,同样是其他方式工作正常.
注意:我知道上面的代码不是内存优化的,但我现在关心的是以某种方式使它工作,我可以稍后优化它

下图显示了Dataset1作为数据源
在此输入图像描述

小智 1

两种可能性 - 你在哪里得到抛出的参数丢失错误?如果它位于存储过程 SP_Web_GetReportTables 上,则您不会在 MyCommand 上为该存储过程添加任何参数。如果它位于报表本身上,请检查报表本身一侧的“字段资源管理器”,看看是否在那里定义了使用 DSN 留下的任何参数。由于您现在直接传入数据集,因此不需要传入任何参数。最后,如果这是使用水晶报表查看器,只需设置 ReportSource 就应该显示它,我不确定 DataBind 是做什么用的你。