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中。所以在向导中它不接受文本框值或任何东西。
有人可以帮我解决这个问题吗
答案 0 :(得分: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属性。