VB.net windows 应用程序根据多个唯一行值检索值

Posted

技术标签:

【中文标题】VB.net windows 应用程序根据多个唯一行值检索值【英文标题】:VB.net windows application retrieve values based on multiple unique row values 【发布时间】:2017-08-07 10:41:33 【问题描述】:

我正在开发 VB.net Windows 应用程序。我有一个具有唯一员工 ID 的数据库表。如果用户在文本框中输入多个员工 ID。我想显示查询结果与文本框输入 (Ex 001, 002,003) 与 where IN 查询连接以将结果显示到网格视图中。

例子:

Select * from Employees where Employeeid IN(textbox values)

【问题讨论】:

【参考方案1】:

如果文本框中的值以逗号分隔且表格中的字段为数字,则可以直接使用文本框中的值。

sql = "Select * from Employees where Employeeid IN("+ textbox.text +")"

如果用户使用逗号分隔,则可以使用替换功能

sql = "Select * from Employees where Employeeid IN( "+ textbox.text.Replace(" ",",") +")"

如果您的 EmployeeId 列不是数字,那么您必须对文本框中输入的每个值使用单引号。即In('121','123','124')

【讨论】:

感谢您的回复。如果我们可以验证用户何时错过了两个 id 之间的逗号,有什么办法吗? 如果用户错过了逗号,那么您可以添加替换功能。这将用逗号替换空格,【参考方案2】:

请不要做你正在做的事情。它非常容易受到 SQL 注入的攻击。如果您不知道这是什么,请谷歌它。如果有人在您的 TextBox "1,2); DELETE FROM 员工 WHERE 1 IN (1,2" 中输入会发生什么?

如果您必须允许多项选择,最好通过例如一个 ListBox 显示所有可能的值,SelectionMode MultiExtended。然后,您可以控制将选择安排到安全的 SQL 命令中以发送到数据库。

编辑

作为第二点,如果您的员工 ID 采用 001、002、003 等形式,那么它们是某种形式的字符串/varchar/文本,在这种情况下,IN () 中的所有元素都需要被包围用单引号。再一次更容易不依赖您的用户知道这一点。

【讨论】:

感谢您的建议,但我的表有 30000 行,并且使用这么多数据从列表框项中为查询选择多个搜索项是非常不切实际的。任何其他建议将不胜感激。 在这种情况下,有一个 TextBox 和一个 Button 并使您的 ListBox 动态化。在 TextBox 中输入一个值,然后单击按钮将其添加到 ListBox 中,首先检查 TextBox 中的值是否需要长度并且不包含限制的单词或字符(例如“;”)。然后从 ListBox 的内容构建您的 SQL。但我有点困惑,如果有 30,000 行,那么任何人都应该知道他们想要的 Employee 的 EmployeeId。您不需要按姓名、部门等进行过滤吗?

以上是关于VB.net windows 应用程序根据多个唯一行值检索值的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 VB.net 程序在 Windows XP 上运行?

求大神指点vs2012里的vb.net 编写的windows 服务怎么启动呀

如何在 VB.NET 中检测多个修改按钮和按下的字符

VB中多个模式的SQL查询

在 VB.NET 中将 UTF-8 转换为 windows-1255 编码

通过 vb.net 以编程方式创建 Access 数据库