0

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デザイナで設定する必要があるものがあります。

4

1 に答える 1

1

デザイナでは、クエリは期待するパラメータを期待する順序で表示します。つまり、GetDataByAllInOne(@ ParentID、@ PaymentDate、@ PaymentAmount、@ SearchValue)のようなものが表示されます。これを最初に確認できますか?

于 2013-01-15T21:09:04.693 に答える