C# 从winforms textbox立即从sql数据库中获取数据
我将Winforms用于我的应用程序&SQL Server作为数据库 我希望在文本框中键入任何文本后,立即从SQL SERVER数据库表中获取/搜索所提供文本的结果 为此,我提出了以下问题:C# 从winforms textbox立即从sql数据库中获取数据,c#,.net,sql,sql-server-2005,dataset,C#,.net,Sql,Sql Server 2005,Dataset,我将Winforms用于我的应用程序&SQL Server作为数据库 我希望在文本框中键入任何文本后,立即从SQL SERVER数据库表中获取/搜索所提供文本的结果 为此,我提出了以下问题: public partial class Form1 : Form { SqlConnection conn = new SqlConnection(); public Form1() { conn.ConnectionString = "Trusted_Co
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;
}
}
但是,由于每次都从数据库中获取数据,因此需要更多的时间,但我希望有一种更快的方法。因此,我应该为此使用数据集,因为数据集用于断开连接的环境
或
首先,我将从数据库中获取整个ITEM表到GridView中,并在表单打开时显示它
现在,当文本输入到文本框中时,它将不会从sql数据库中获取数据,而是在GridView中进行搜索,这样会更快吗
哪种方式更有效
项目表有340万条记录。您的项目表有多大 如果它不大,只需将其存储在数据集中即可。使用相同的文本框,但在数据集中搜索 如果它很大,我建议使用定时器。在每次文本更改时,重新启动计时器大约0.5秒。计时器运行后,只查询数据库。这可以防止用户键入时出现多个查询 或者,如果您可以读取整个表并将其分配给
自动完成CustomSource
:
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
foreach(DataRow row in dt.Rows)
textBox1.AutoCompleteCustomSource.Add(row["item_name"] as string);
你的物品表有多大 如果它不大,只需将其存储在数据集中即可。使用相同的文本框,但在数据集中搜索 如果它很大,我建议使用定时器。在每次文本更改时,重新启动计时器大约0.5秒。计时器运行后,只查询数据库。这可以防止用户键入时出现多个查询 或者,如果您可以读取整个表并将其分配给
自动完成CustomSource
:
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
foreach(DataRow row in dt.Rows)
textBox1.AutoCompleteCustomSource.Add(row["item_name"] as string);
对。使用数据集并在其上搜索会快得多。由于您使用的是WinForms,内存占用可能也不是问题,除非您从数据库中获取大量行
另外,您可能不应该搜索每一个文本更改,而是等待一小段时间,比如说2秒钟,在此期间文本框没有更改,然后获取。否则,您将获取在文本框中输入的任何新字符(我认为)。是。使用数据集并在其上搜索会快得多。由于您使用的是WinForms,内存占用可能也不是问题,除非您从数据库中获取大量行
另外,您可能不应该搜索每一个文本更改,而是等待一小段时间,比如说2秒钟,在此期间文本框没有更改,然后获取。否则,您将获取在文本框中输入的任何新字符(我认为)。更好的方法是使用DataSet/DataTable。从表单加载上的表中读取所有数据并将其存储在表单中。更好的方法是使用DataSet/DataTable。读取表单加载表中的所有数据并将其存储在表单中。@Remus Rusanu:在文本框更改事件中,我应该写入它?@Remus Rusanu:什么是快速?请提及正确的完整代码不要照Remus的建议做,它会抹掉你的整个桌子。@Remus Rusanu:在文本框更改事件中,我应该写下它?@Remus Rusanu:什么很快?请说明正确的完整代码不要按照Remus的建议做,它会抹掉您的整个表。先生,我在items表中有340万条记录IR,我在items表中有340万条记录