数据集设计者如何确定标量查询的返回类型?
Posted
技术标签:
【中文标题】数据集设计者如何确定标量查询的返回类型?【英文标题】:How does the dataset designer determine the return type of a scalar query? 【发布时间】:2011-02-08 00:53:03 【问题描述】:我正在尝试向数据集添加标量查询。该查询非常简单,它只是在几列中添加一些十进制值并返回它们。我 100% 确信只返回一行和一列,并且它是十进制类型(SQL 货币类型)。问题是由于某种原因,生成的方法(在 .designer.cs 代码文件中)正在返回一个对象类型的值,而它应该是十进制的。奇怪的是,还有另一个标量查询具有完全相同的 SQL,但返回的却是应有的小数。
数据集设计器如何确定数据类型,我如何告诉它返回十进制?
【问题讨论】:
【参考方案1】:首先使用数据适配器将 dataset.tables("") 的模式填充到“schematype.source”。例如:sqladp.fillschema(ds.tables(0),schematype.source)
然后填充数据集 sqladp.fill(ds.tables(0))
现在我认为它应该返回源表的数据类型。
这是你要找的吗?
【讨论】:
【参考方案2】:不要使用标量存储过程,而是使用标量函数。数据集设计器将正确检测标量函数的数据类型。如果您在查询期间对数据进行更改,则只需要使用标量存储过程。标量函数是只读的。您还可以非常方便地将函数作为查询拖入数据集中,而无需通过向导。
如果您坚持使用存储过程或常规查询,您总是可以像这样(在 VB 中)转换结果...
Dim ta As New DataSet1TableAdapters.QueriesTableAdapter
Dim result As Decimal = DirectCast(ta.StoredProcedure1, Decimal)
或使用 Option Infer On
Dim resultInfer = DirectCast(ta.StoredProcedure1, Decimal)
【讨论】:
拖动功能是一个不错的提示。在我设置标量输出时,删除它会产生 NonQuery 函数。出于某种原因,在我的情况下,Scalar 设置总是返回 null,而 NonQuery 则按预期工作....以上是关于数据集设计者如何确定标量查询的返回类型?的主要内容,如果未能解决你的问题,请参考以下文章