改进文本框中的条形码搜索C#

时间:2013-04-09 22:50:40

标签: c# sql winforms textbox

在WinForm C#应用程序中,我有一个Barcode_textbox。在TextChanged事件中,我有一个SQL查询来检查数据库中的TextBox.Text值,即条形码。问题是,对于每个输入的数字,SQL Query将被触发,因此如果长度为13的条形码将在数据库中进行13次检查并且它非常慢。

那么,只有当用户停止在TextBox(或条形码阅读器stpos读取)中写入时才触发的TextBox事件是什么,或者什么是检查数据库中条形码的最佳解决方案。请注意,bacode的长度不同

5 个答案:

答案 0 :(得分:2)

我记得我是如何成功地做到这一点的。

我把Timer控件放在我的应用程序中,间隔为一秒(1000毫安)。然后我将Form.KeyPreview属性设置为True。

在Form Key按事件中,我存储了击键。在Timer.Tick事件中检查记录的击键长度是否超过12个字符。

然后触发对SQL的调用。成功返回记录(或文本框包含大于20个字符)时,清除存储的键击。


查看更新,截至2019年3月: https://stackoverflow.com/a/55411255/495455

答案 1 :(得分:1)

以这种方式使用计时器,当用户在给定的小时间内停止输入文本框时,只说1秒钟,然后从数据库中获取数据......

此外,您可以检查用户使用计数器键入的字符,以便当它超过最小值(您的密钥的最小尺寸)时获取数据...将节省大量时间

答案 2 :(得分:1)

定时器是解决这个问题的可怕方法。

使用KeyUp的{​​{1}}事件并检查回车。大多数条形码扫描器在代码之后提交回车符...如果他们默认没有这样做,他们会带条形码来配置它。

您可以通过打开记事本并在条形码后扫描条形码来测试。每一个都将在新的一行。

答案 3 :(得分:0)

您可以使用Validating事件来检查TextBox的内容 您的用户将需要按TAB键将当前焦点从TextBox更改为Taborder之后的下一个控件,并且将触发验证事件

private void textBox_BarCode_Validating(object sender, CancelEventArgs e)
{
     // Code to check the barcode on the SQL database....       
     if(!ValidBarCode(textBox1.Text))
     {
           // Cancel the event and select the text to be corrected by the user.
           e.Cancel = true;
           textBox1.Select(0, textBox1.Text.Length);
     }

}

假设下一个控件是使用插入的条形码(添加)(或插入条形码描述的项目数量的文本框)执行某些操作的命令。一段时间后,所有操作都变成了非常自然的数据输入处理

答案 4 :(得分:0)

如何进行查询异步?

如果您不能或想要一个简单的脏解决方案,那么我会坚持使用计时器