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的主要内容,如果未能解决你的问题,请参考以下文章

Typescript 强类型键值对声明

四两拨千斤——你不知道的VScode编码TypeScript的技巧

如何在打字稿中声明成功/失败返回类型

Python动态强类型解释型语言

原来可以编译过的工程,现在提示 IntelliSense: 应输入声明;而且很多行都有这个错误!不知道是啥原因?

Visual Studio 2008 intellisense用于枚举类型