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

问题描述 投票:-1回答:2

如果我输入正确的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);             
    }
}
c# textbox textchanged
2个回答
2
投票

您的查询易受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 ..最后使用关闭数据库连接。

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.