0
SELECT COUNT(*) AS Expr1 
FROM Book 
INNER JOIN Temp_Order ON Book.Book_ID = Temp_Order.Book_ID 
WHERE (Temp_Order.User_ID = 25) 
AND (CONVERT (nvarchar, Temp_Order.OrderDate, 111) = CONVERT (nvarchar, GETDATE(), 111))

ここで、User_ID を label.Text から取得するように変更したい

この Sql ステートメントは DataView にあります。そのため、ウィザードではテキスト ボックスの値などを受け入れません。

誰かがこれを解決するのを手伝ってくれますか

4

1 に答える 1

0

CONVERT を使用して日付列を比較しないでください。日時のみから日付を比較するには、BETWEEN を使用します。さらに良いのは、列に DATETIME ではなくDATE型を使用することです。

DataView をフィルター処理するには、基になるクエリをフィルター処理します。パラメータ化されたクエリを使用します。

SELECT COUNT(*) AS Expr1 
FROM Book 
INNER JOIN Temp_Order ON Book.Book_ID = Temp_Order.Book_ID 
WHERE (Temp_Order.User_ID = @User_ID) 
AND Temp_Order.OrderDate BETWEEN @fromDate AND @toDate;

@User_ID をパラメーターとしてクエリに渡します。command.Parameters.AddWithValue("@User_ID", Convert.ToInt32(label.Text));

LINQ を使用して同様の結果を取得し、結果を DataView に変換することもできます。 DataView によるフィルタリング を参照してください。

文字列ベースのフィルター処理機能に加えて、DataView はフィルター条件に LINQ 式を使用する機能も提供します。LINQ 式を使用すると、文字列ベースのフィルタリングよりもはるかに複雑で強力なフィルタリング操作が可能になります。

何をするにしても、DataView.RowFilter プロパティを使用しないでください。

于 2010-03-25T00:09:41.263 に答える