2013-02-20 51 views
0

我已经在用户要填写的表单中有很多文本框,并且我想检查用户的输入是否存在于数据库中。类似于某些网站在输入时检查用户名的方式。如果后者的用户名存在于数据库中,则会将其标记为绿色或带有复选框。效率和性能要求

在我的情况下,用户必须填写整个表格,其中每个文本框表示表格中的不同列。检查数据库中是否存在值的最佳方法是什么?它必须是最快的方法,因为我不能拖延。

这是我想采用的方法:

用户开始输入数据之前,SQL查询将在数据库中进行检索表中的所有记录(一个简单的SELECT * FROM table)。接下来,这将被保存在DataTable

当用户完成在文本框中输入文本(即相应文本框没有聚焦)时,将检查表单中的所有文本框以查看它们的输入存在于数据库中。这将通过针对每个文本框针对DataTable运行LINQ语句来查看该值是否包含在DataTable中。

此方法是否有效?我希望它尽可能快,任何滞后都是不能容忍的。

回答

2

如果table中的行数不是太大,那就是我会使用的方法。
如果数字太大而无法将它们合理地保存在内存中,则必须每次都访问数据库。
您可以进行以下优化:

  1. 添加一个索引到每一个需要搜索栏。请注意,这将增加需要添加行到该表
  2. 只搜索,实际上改变了
  3. 虽然搜索数据库文本框数据库中的时间,给用户视觉反馈的小微调的形式旁文本框。
+0

感谢您的意见。不幸的是,行的数量是在运行时确定的,因此可能会有非常大量的行或小的行。该软件可以用于任何数据库。 – 2013-02-20 09:38:47

+0

@DotNET:请参阅更新。 – 2013-02-20 09:42:04

+0

不幸的是,第一步是不可能的,因为应用程序不应该能够修改数据库,但只能从它们“读取”。第二种方法很好,但我怎么去实现哪些文本框已经改变?为了给问题添加更多的上下文,可以有无限量的文本框,因为用户可以随意添加这些文本框。所以情况比标准表格复杂一点 – 2013-02-20 09:45:07

1

我建议不要一次检查所有的字段。 只要字段填满,我会考虑缩小数据的方法。

让我解释一下。让我们假设您在DataTable中有10000条用户记录。在用户完成填写第一个字段(通常为'First Name')后,然后仅检查此列中的数据库(SELECT users.firstName FROM table),然后根据结果(SELECT * FROM table WHERE firstName like ('%firstNameField%'))更新DataTable

你可以做到这一点只适用于加载数据的领域,他们可以为你节省一些额外的时间。

希望你明白这个想法:)

+0

感谢您的意见。但是,直接查询DataTable而不是数据库不是更好吗? – 2013-02-20 09:49:13

+0

我认为这取决于您希望拥有的记录数量...... – 2013-02-20 09:51:12

+0

行数量要在运行时确定,因此可能会有大量的行或少量的行。这是因为该软件可以用于任何数据库。 – 2013-02-20 09:53:09