2013-02-20 86 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