0

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

在我的例子中,用户必须填写一个完整的表格,其中每个文本框代表表格中的不同列。检查数据库中是否存在该值的最佳方法是什么?这必须是最快的方法,因为我不能承受滞后。

这是我想到采用的方法:

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

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

这种方法行得通吗?我希望它尽可能快,并且不能容忍任何滞后。

4

2 回答 2

2

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

  1. 为您需要搜索的每一列添加一个索引。请注意,这会增加向该表添加行所需的时间
  2. 仅在数据库中搜索实际更改的文本框
  3. 在搜索数据库时,以文本框旁边的小微调器的形式给用户视觉反馈。
于 2013-02-20T09:37:28.967 回答
1

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

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

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

希望你理解这个想法:)

于 2013-02-20T09:47:04.953 回答