【发布时间】:2019-04-27 15:42:36
【问题描述】:
我有一个数据库(SQL 服务器),其中有一个学生表,其中有字段名称(nvarchar(50))、年龄(int)和生日(日期)。我在 C# windows 窗体中添加了这个数据库。我按名称搜索:
bindingSource.Filter = "Name LIKE'" + textBox5.Text + "%'";
而且效果很好。但这不适用于 Age 字段:
bindingSource.Filter = "Age LIKE'" + Convert.ToInt32(textBox5.Text) + "%'";
其他人可以知道如何为生日字段做同样的事情吗?
【问题讨论】:
-
在任何事情之前,停止注入你的价值观。始终参数化您的查询。您现在拥有的是一个巨大的安全漏洞。
-
年龄是整数,不能和字符串比较。您可能应该将 Age 列转换/转换为字符串并进行比较。
-
关于您的问题,您不能对数字数据类型使用
LIKE,它必须是字符串类型。你在这里的最终目标是什么?似乎您应该改用BETWEEN逻辑。我假设你真的想要AGE BETWEEN 30 AND 39或Age >= 30 AND Age < 40,而不是Age LIKE '3%'。 -
如果我是你的导师,我会通过搜索名字类似于
';DROP TABLE Students;--的学生来测试你的代码 -
或者你可以把你的儿子“小鲍比桌”送到学校@DanGuzman ???? xkcd.com/327
标签: c# sql-server winforms