使用存储过程时的参数顺序问题

Posted

技术标签:

【中文标题】使用存储过程时的参数顺序问题【英文标题】:Parameter order issue when using stored procedure 【发布时间】:2012-09-23 11:48:57 【问题描述】:

我正在使用 Crystal Reports 9 - 我构建了一个基本上使用存储过程并具有 3 个参数的报表:A、B、C,它们也是报表中的提示。我也有提示 D 和 E,它们 传递给存储过程。当我正常运行此报告(通过 CR9)时,提示以正确的预期顺序显示:A、B、C、D、E。但是,我的客户在使用水晶报告查看器时遇到了奇怪的行为:提示的顺序显示的是:D、E、A、B、C。我不确定这是否是一个错误:我尝试重新添加提示,首先将它们全部删除,然后按照我想要的顺序重新添加提示出现,但他们仍然看到不正确的顺序。我也试图让他们更新他们的查看器版本,他们也看到了同样的问题。

另请注意,它不是按字母顺序对提示(在查看器中)进行排序。我的例子只是为了论证。

为什么查看器会以不同的顺序显示提示?这个问题似乎只在我链接到存储过程时才存在。

谢谢。

【问题讨论】:

【参考方案1】:

我不知道您的报告中是否有可能,但请尝试以下几个建议:

    使用组 使用一系列子报表(“A”后的每个提示一个)

【讨论】:

但这会如何影响提示的顺序? 使用子报告可以让您按照您想要的顺序提取每个提示所需的信息。因此,提示“A”将为您提供有关“A”组内主报告的信息,“B”将是组页脚“A”1中自己的子报告,“C”将是它自己的子报告组页脚“A”2... 我说的是在运行报表之前实际呈现给用户的提示的顺序(不是报表本身出现的顺序) 抱歉,我认为它的显示方式不正确。我知道当您运行报告时它显示正确,但是用户看到的是显示他们在字段资源管理器下的顺序吗?如果它们显示您看到它们的方式,我唯一能想到的就是尝试取消选中“保存数据”选项,保存并关闭报告。重新打开报表,重新勾选“Save with Data”并再次保存报表。看看这是否解决了问题。 如果参数在字段资源管理器中按照用户看到的方式排序。他们将需要重新排序。我不确定如何在 CR9 中执行此操作,在 CR10 中您可以右键单击参数并移动到您想要的位置。【参考方案2】:

我想你只是从Database Expert 中选择Stored Procedure 并点击它,设置报告源。

你可以改为:

打开Database Expert 点击Add Command 从右侧面板按正确顺序添加您需要的参数(A、B、C 以及存储过程不需要的 D、E) 键入与Exec MyStoredProcedure ('?ParamA','?ParamB', ?ParamC );类似的查询 [如果param是字符串(ParamA, ParamB)需要用'封装,如果是数字(ParamC)就不用封装]

参数为:

以正确的顺序提示用户 根据需要传递给存储过程 如有需要,可在报告逻辑中使用

【讨论】:

这是一个非常好的建议:不幸的是,有一些限制,例如我不能自己重新排序参数(它们似乎是强制按字母顺序排列),这有点像交易-断路器。正如我所说的,A、B、C、D、E 是一个例子,不是按字母顺序显示的。 如果不使用 Param D 和 Param E 似乎也会被删除。 这只是一种解决方法,但您可以使用 params 前缀,直到找到解决方案:1- ParamB、2- ParamE、3-ParamA 等等 我想到了这一点,但这与其他报告不一致(部分原因首先是排序问题)。不过,感谢您的建议。

以上是关于使用存储过程时的参数顺序问题的主要内容,如果未能解决你的问题,请参考以下文章

表中无访问时的存储过程访问

asp.net 使用存储过程时参数为空时的处理

使用没有字母参数的 Postgresql 的 Dapper 存储过程

C# Oracle 存储过程参数顺序

MyBatis存储过程的使用问题

请问oracle怎么执行存储过程