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

Textbox with TextChanged event doesn't bring the date in second enter

如果我输入正确的 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 注入攻击。

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

您的查询容易受到 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 块中包含消息框。使用 finally 关闭您的数据库连接。

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