效率&表现要求

时间:2013-02-20 09:34:48

标签: c# .net sql sql-server wpf

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

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

这是我想采用的方法:

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

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

这种方法有用吗?我希望它尽可能快,任何滞后都是不能容忍的。

2 个答案:

答案 0 :(得分:2)

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

  1. 为您需要搜索的每列添加索引。请注意,这会增加向该表添加行所需的时间
  2. 仅在数据库中搜索实际更改的文本框
  3. 在搜索数据库时,在文本框旁边以小旋转器的形式向用户提供视觉反馈。

答案 1 :(得分:1)

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

让我解释一下。假设您在DataTable中有10000条用户记录。在用户完成填写第一个字段(通常是“名字”)之后,然后仅使用您的数据库(SELECT users.firstName FROM table)检查此列,然后您可以根据结果更新DataTable({ {1}})。

您只能对加载数据的字段执行此操作,并且可以为您节省一些额外的时间。

希望你理解这个想法:)