【发布时间】:2016-04-27 00:43:07
【问题描述】:
我试图使用combobox 在datagridview 上创建一个过滤器。
我想做的是过滤datagridview中的过滤数据。
我有七个comboboxes 用于过滤。例如,第一个combobox 是年份,那么我仍然想将搜索过滤到年级,然后过滤到部分等等。因此,用户将能够对数据库中的搜索进行排序或过滤。
到目前为止,我有我的存储过程代码并在组合框中进行了尝试。 SchoolYear、Grade、section、Gender、status、Account 过滤效果很好。除了年龄,我将查询设置为自动计算年龄而不保存到数据库中,现在我的问题就是过滤年龄。
我以这种方式完成了我的存储过程。
ALTER PROCEDURE [dbo].[uspYearGradeFilter]
@Year Nvarchar(20) = NULL,
@Grade Nvarchar(20) = NULL,
@Section Nvarchar(20) = NUll,
@Gender Nvarchar(20) = NULL,
@Status Nvarchar(20) = NULL,
@Status2 Nvarchar(20) = NULL,
@Age Nvarchar(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
si.StudentID, SI.Surname, SI.FirstName, SI.MiddleName,
si.Gender, si.BirthDay, SI.TelNum,
Birthday, getdate() AS [Today],
Datediff(yy, BirthDay, getdate()) -
CASE
WHEN DATEADD(YY, DATEDIFF(YY, BirthDay, getdate()), BirthDay) > GETDATE()
THEN 1
ELSE 0
END AS [age]
FROM
StudentInformation SI
JOIN
StudentHistory SH ON SI.StudentID = SH.StudentID
WHERE
sh.SchoolYear LIKE COALESCE('%'+ @Year+'%', sh.SchoolYear)
AND sh.Levels LIKE COALESCE('%' + @Grade + '%', sh.Levels)
AND SI.Gender LIKE COALESCE('%' + @Gender + '%', si.gender)
AND SH.Section LIKE COALESCE('%' + @Section + '%', sh.Section)
AND Si.Status LIKE COALESCE('%' + @Status + '%', si.status)
AND Sh.Status2 LIKE COALESCE(@Status2 + '%', sh.status2)
AND [Age] LIKE COALESCE('%' + @Age + '%', [Age])
END
但我得到一个错误:
消息 207,级别 16,状态 1,过程 uspYearGradeFilter,第 42 行
列名“年龄”无效
有人可以帮我解决这个问题吗?谢谢
【问题讨论】:
-
旁注:到底为什么您将
nvarchar(20)用于像@Year这样的参数,显然 是一个数值?请始终使用最合适的数据类型 - 对数值使用数值类型,对日期和时间使用日期和时间类型 - 而不仅仅是字符串! -
@marc_s - 你不知道现代风格是将每个变量声明为字符串,然后在使用时使用
.ToString()?
标签: sql-server vb.net sql-server-2008