Visual StudioDataSetDesignerで作成された強い型のDataSetに対する次のクエリがあります。
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番目のパラメーターを10進数として表示します。これは、マウスが@SearchValueのパラメーターの上にあるときにわかりました。
このコーディングを実行すると、次のエラーが表示されます。
Conversion from string "Books" to type 'Decimal' is not valid.
このクエリで小数である唯一の列はPaymentAmountであり、これはたまたま4番目のパラメータではなく3番目のパラメータです。
インテリセンスが4番目のパラメーター@SearchValueが10進数であると述べている理由がわかりません。文字列に変更する方法を教えていただけますか?
興味深いのは、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デザイナで設定する必要があるものがあります。