我正在为我的应用程序使用Winforms& SQL Server作为数据库。
我希望只要在文本框中输入任何文本,就会从SQL SERVER数据库表中为所提供的文本提取/搜索立即结果。
为此,我提供了以下查询:
public partial class Form1 : Form
{
SqlConnection conn = new SqlConnection();
public Form1()
{
conn.ConnectionString = "Trusted_Connection=true";
conn.Open();
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataTable dt = null;
SqlCommand cmd = new SqlCommand ("SELECT * FROM items WHERE item_name LIKE'" + textBox1.Text + "%'", conn);
SqlDataReader reader = cmd.ExecuteReader();
dt = new DataTable();
dt.Load(reader);
dataGridView1.DataSource = dt;
}
}
但是,因为每次从数据库中获取数据,所以需要更多时间,但我想要更快的方式。因此,我将使用DATASETS用于此目的,因为数据集用于断开连接的环境。
OR
我将首先将整个ITEM表从数据库中提取到GridView,&打开表单时显示它。
现在,当在文本框中输入文本时,它不会从sql数据库中获取数据,而是会在GridView中搜索,那么这会更快吗?
哪种方式有效?
项目表有340万条记录。
答案 0 :(得分:1)
你的物品表有多大?
如果它不大,那么只需将其存储在数据集中即可。使用相同的文本框但在数据集中搜索。
如果它很大,我会建议使用计时器。在每个文本更改上,重新启动可能0.5秒的计时器。当计时器过去后,只查询数据库。这可以防止在用户输入时进行多次查询。
或者,如果您可以阅读整个表格并将其分配给AutoCompleteCustomSource
:
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
foreach(DataRow row in dt.Rows)
textBox1.AutoCompleteCustomSource.Add(row["item_name"] as string);
答案 1 :(得分:1)
是。使用数据集并在其上进行搜索会快得多。由于您使用的是WinForms,因此除非您从数据库中获取大量行,否则内存占用可能也不是问题。
此外,您可能不应该搜索每个文本更改,但等待少量时间说2秒,在此期间文本框没有更改然后获取。否则你将获取在文本框中输入的任何新字符(我认为)。
答案 2 :(得分:1)
更好的方法是使用DataSet / DataTable。从表格加载表中读取所有数据,并将其存储在表格中。