Intellisense 声明强类型 DataSet 查询的参数是 Decimal,而它应该是 String
Posted
技术标签:
【中文标题】Intellisense 声明强类型 DataSet 查询的参数是 Decimal,而它应该是 String【英文标题】:Intellisense states a parameter for a strongly typed DataSet query is a Decimal when it should be a String 【发布时间】:2013-01-15 17:03:32 【问题描述】:我们对在 Visual Studio 数据集设计器中创建的强类型数据集进行了以下查询:
SELECT ID, PaymentAmount, PaymentDate, WhatWasPaymentFor
FROM Payments
WHERE ParentID = @ParentID
AND (@PaymentDate is null OR PaymentDate = @PaymentDate)
AND (@PaymentAmount is null OR PaymentAmount = @PaymentAmount)
AND ((@SearchValue is null OR
(WhatWasPaymentFor LIKE '%' + @SearchValue + '%' OR @SearchValue='ALL'))
)
在 VB.Net 代码隐藏文件中,我们调用查询来填充 DataSet,如下所示:
Dim tblObject = theTableAdapter.GetDataByAllInOne(dcmParentsId, Nothing, Nothing, TextBoxSearch.Text)
当我认为它是一个字符串时,Intellisense 将第 4 个参数显示为一个小数。当鼠标悬停在@SearchValue 的参数上时,我发现了这一点。
执行此编码时,显示此错误:
Conversion from string "Books" to type 'Decimal' is not valid.
此查询中唯一的十进制列是 PaymentAmount,它恰好是第三个参数而不是第四个参数。
我不确定为什么智能感知指出第四个参数 @SearchValue 是十进制。您能告诉我如何将其更改为字符串吗?
确实发生的一件有趣的事情是,如果在 SQL Server Magagement Studio 中运行查询将正常工作:
DECLARE @SearchValue VARCHAR = 'Books'
DECLARE @ParentID INT = 3
DECLARE @PaymentDate DATETIME = NULL
DECLARE @PaymentAmount MONEY = NULL
SELECT ID, PaymentAmount, PaymentDate, WhatWasPaymentFor
FROM Payments
WHERE ParentID = @ParentID
AND (@PaymentDate is null OR PaymentDate = @PaymentDate)
AND (@PaymentAmount is null OR PaymentAmount = @PaymentAmount)
AND ((@SearchValue is null OR
(WhatWasPaymentFor LIKE '%' + @SearchValue + '%' OR @SearchValue='ALL'))
)
也许我不知道需要在 DataSet 设计器中设置一些东西。
【问题讨论】:
【参考方案1】:在设计器中,查询将按预期的顺序显示预期的参数,即您应该看到类似 GetDataByAllInOne(@ParentID,@PaymentDate,@PaymentAmount,@SearchValue) 的内容。 你能先检查一下吗?
【讨论】:
感谢您的回答。我相信它的顺序相同,但我必须明天确认,因为我的工作场所今天因下雪而关闭。 Intellisense 显示:GetDataByAllInOne(ParentID As Integer, PaymentDate As Date?, PaymentAmount As String, SearchValue As Decimal?) 我不知道为什么 intellisense 也会在此处粘贴问号 (?)。文章开头是我在设计器中定义查询的方式。谢谢。 问号表示它们是可为空的类型 - 您在调用它们时没有任何参数,因此它们确实需要是可为空的类型。 Intellisense 显示查询期望的参数。当您说“我如何在设计器中定义查询”时,这不是我的意思。我的意思是在表格适配器的下半部分,在数据集设计器中,您的查询与他们期望的参数一起列出。正如您从智能感知中看到的那样,它们并不总是与您输入它们时的顺序相同。 刚刚又看了一遍 - 看来您的 SearchValue 和 PaymentAmount 已在某处交叉。尝试在设计器中重建查询。 刚刚重建它,但它仍在寻找第 4 个参数的小数。也许这是一个 Visual Studio 错误?以上是关于Intellisense 声明强类型 DataSet 查询的参数是 Decimal,而它应该是 String的主要内容,如果未能解决你的问题,请参考以下文章
四两拨千斤——你不知道的VScode编码TypeScript的技巧