【发布时间】:2015-10-28 13:34:21
【问题描述】:
我有一个 VB.Net 应用程序,它使用来自不同数据源的数据集创建一个水晶报表,这些数据源进入单独的子报表。报告显示正常,直到我尝试使用存储过程作为子报告的数据源,在这种情况下,我收到错误“报告文件路径无效”。
此存储过程需要将数字连接到列名以避免重复代码。
我在填充数据集的位置设置了断点,检查了数据集的内容,发现所有需要的数据都在数据集中,但是当我单步执行到打开报告的位置时会出现错误。当我在 SQL Server 中执行存储过程时,数据返回没有问题。如果我删除使用存储过程的子报表,报表将生成正常。想知道存储过程是否需要以不同方式编码...?还是别的什么?
这是存储过程的代码
ALTER PROCEDURE [dbo].[T_STORED_PROC]
(
@qmonth varchar(20),
@qyear varchar (4),
@qid varchar (10)
)
AS
DECLARE @i varchar(10)
DECLARE @sql varchar(1000)
SET @i = 1
WHILE (@i <=28)
BEGIN
SET @sql ='SELECT t1.ID, t2.CatId, t2.CatName, t1.M_'+ @i +'_DATE As Mid_Date
FROM Table1 As t1, Table2 As t2 WHERE t2.CatId = RTRIM(LEFT(t1.M_'+ @i +', 2))
AND t1.ID = '''+ @qid +''' AND t1.Yr = '+ @qyear +' AND t1.M_Month = '''+ @qmonth +'''
ORDER BY t1.ID'
EXEC (@sql)
END
相关的VB在这里
Dim dsQRpt = New Data.DataSet
Dim dsMS = New Data.DataSet
Dim QPrpt = New ReportDocument
Dim cmd As OleDbCommand = New OleDbCommand()
cmd.Connection = MSCON
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "dbo.T_STORED_PROC"
cmd.Parameters.Add("@qmonth", OleDbType.VarChar, 20, ParameterDirection.Output).Value = cboMonth.SelectedValue
cmd.Parameters.Add("@qyear", OleDbType.VarChar, 4, ParameterDirection.Output).Value = cboYear.SelectedValue
cmd.Parameters.Add("@qid", OleDbType.VarChar, 10, ParameterDirection.Output).Value = txtPTSID.Text
Dim DAms As New OleDbDataAdapter(cmd.CommandText, MSCON)
DAms.SelectCommand = cmd
DAms.Fill(dsQRpt)
QPrpt.Load(Server.MapPath("crReport.rpt"))
QPrpt.SetDataSource(dsQRpt)
crQtrProgress.ReportSource = QPrpt
感谢您的帮助
【问题讨论】:
标签: sql-server vb.net stored-procedures crystal-reports