我如何防止按钮代码运行两次,如果用户点击不止一次在c#中
本文关键字:用户 如果 不止一次 两次 按钮 何防止 代码 运行 | 更新日期: 2023-09-27 18:17:06
我有一个方法,当用户单击按钮时,它从表中选择数据并将其添加到文本框中。问题是,当用户单击2次或更多次时,每次单击都会运行一次显示代码,并且在文本框中多次显示数据。
如何清除文本框,只显示一次数据?
注意:默认情况下,其中一个文本框有一个字符串,我在查询中使用该字符串来获取数据。当我清除数据时,查询抛出一个错误,因为它没有我刚刚清除以完成查询的字符串。
这是我使用的代码方法:
private void FillFilds()
{
mycon.Open();
string queryfill= "SELECT *From master where Num=@Num";
oleDbCmd = new OleDbCommand(queryfill, mycon);
oleDbCmd.Parameters.Add("@Lot", OleDbType.VarChar, 40).Value = Numtxt.Text;
OleDbDataReader reader;
try
{
reader = oleDbCmd.ExecuteReader();
reader.Read();
Idlbl.Text += reader[0];
Datetxt.Text += reader[1];
DatePtxt.Value = Convert.ToDateTime(reader[2]);
Jobtxt.Text += reader[3];
NoBtxt.Text += reader[4];
NoPatxt.Text += reader[5];
NoMtxt.Text += reader[6];
Numtxt.Text += reader[7];
NoRtxt.Text += reader[8];
Description.Text += reader[9];
NoMatxt.Text += reader[10];
reader.Close();
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
}
mycon.Close();
}
我想这可能会澄清一些问题…对不起,我刚开始在论坛上写东西。
您可以将这个默认值存储在某个地方,例如作为类中的字段:
private string DefaultNumber = "12345";
// ...
然后你可以把这个值赋给TextBox:
Number.Text = DefaultNumber; // instead of Number.Clear() or Number.Text = ""
但是你应该使用sql-parameters来防止sql注入:
string queryfill = "SELECT * From master where Number = @Number";
DataTable table = new DataTable();
using (OleDbConnection conn = new OleDbConnection(ConnString))
using (OleDbDataAdapter da = new OleDbDataAdapter(queryfill, conn))
{
da.SelectCommand.Parameters.AddWithValue("Number", Number.Text);
da.Fill(table);
}
如果文本在文本框中多次出现,那么您必须添加它,而不是设置它。请确保使用=号来设置文本框的。text值,而不是在文本框后面添加(例如使用+=)。
您可能还想考虑硬编码您的默认值,而不是依赖于它显示在文本框中。您可以检查文本框是否为空。如果它为空,则可以使用默认值,如果它不为空,则可以使用输入的值。使用string . isnullorempty (textbox.Text)检查字符串是否为空。
你还应该注意到你的代码是完全不安全的,并且会允许别人通过SQL注入攻击对你的数据库做任何他们想做的事情。永远不要允许将用户输入直接传递到SQL语句中。相反,您应该使用参数化SQL并将用户输入作为参数传递。这可以防止黑客在输入中插入额外的SQL命令。例如,在本例中,如果我输入');删除主表;