我如何防止按钮代码运行两次,如果用户点击不止一次在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();
    }
我想这可能会澄清一些问题…对不起,我刚开始在论坛上写东西。

我如何防止按钮代码运行两次,如果用户点击不止一次在c#中

您可以将这个默认值存储在某个地方,例如作为类中的字段:

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命令。例如,在本例中,如果我输入');删除主表;

SELECT * FROM passwords('在你的文本框中,它会破坏你的主表。
相关文章: