带有TextChanged事件的文本框不会在第二次输入中显示日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有TextChanged事件的文本框不会在第二次输入中显示日期相关的知识,希望对你有一定的参考价值。

如果我输入正确的id,我有一个TextboxTextChanged事件工作得非常好。但是如果我输入一个错误的id并且MessageBox出现在catch部分,然后我尝试输入一个正确的id,它会一直给我MessageBox错误。

这是我的代码:

private void Pro1txt_onChange(object sender, EventArgs e)
{
    try
    {
        cmd1 = new SqlCommand(" SELECT  P_Name,P_Price,P_Quantity from Product where P_ID =  '" + Pro1txt.Text + "'", cn);
        cn.Open();
        DataReader = cmd1.ExecuteReader();
        DataReader.Read();
        ProdcutName1.Text = DataReader["P_Name"].ToString();
        UnitPrice1.Text = DataReader["P_Price"].ToString();
        Rem_Quantity1.Text = DataReader["P_Quantity"].ToString();

        if (Rem_Quantity1.Text =="0")
        {
            Req_Quantity1.Enabled = false;
        }             
    }
    catch
    {
        MessageBox.Show("Error","danget",MessageBoxButtons.OK,MessageBoxIcon.Hand);             
    }
}
答案

您的查询易受SQL注入攻击。你应该使用Parameters

例如:

cmd1 = new SqlCommand(" SELECT  P_Name,P_Price,P_Quantity from Product where P_ID =  @id", cn);
cmd1.Parameters.Clear();
cmd1.Parameters.Add("@id", SqlDbType.Int).Value = int.Parse(Pro1txt.Text);
cn.Open();
....

并尝试不在catch块中包含messagebox ..最后使用关闭数据库连接。

搜索带参数的查询以获取更多信息。

另一答案

首先要做的事:这段代码很容易被sql注入。

然后提供快速解决方案:不要在catch块中显示对话框。设置全局标志以指示您的应用程序状态。然后使用该标志显示您的消息。

以上是关于带有TextChanged事件的文本框不会在第二次输入中显示日期的主要内容,如果未能解决你的问题,请参考以下文章

文本框事件仅触发第二次

Click事件监听器仅在第二次工作

如果在第二次单击时未选择日期并出现日期验证问题,则日期选择器会从日期选择器文本框中清除所选值

与 Ext.data.JsonStore 连接的 ExtJS 3 组合框不会在第二次 ++ 单击时打开

我如何使用文本框textchanged事件更改用户输入类别?

c#textbox的textchanged事件的作用