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。更好的是,对列使用DATE类型而不是 DATETIME。

要筛选 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,请参阅Filtering with DataView

除了基于字符串的过滤功能之外,DataView 还提供了使用 LINQ 表达式作为过滤条件的功能。LINQ 表达式允许比基于字符串的过滤更复杂和强大的过滤操作。

无论您做什么,都不要使用 DataView.RowFilter 属性。

于 2010-03-25T00:09:41.263 回答