带有 TextChanged 事件的文本框不会在第二次输入时显示日期
Textbox with TextChanged event doesn't bring the date in second enter
如果我输入正确的 ID,我有一个 Textbox
和 TextChanged
事件运行得很好。但是如果我输入了错误的 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 关闭您的数据库连接。
搜索带有参数的查询以获取更多信息。