无法在数据库中插入和检查类似的数据

本文关键字:检查 数据 插入 数据库 | 更新日期: 2023-09-27 18:25:12

我正在尝试向数据库中插入一个帐户。在添加下面的语法之前,我将简要解释我的代码的作用。通常,我会检查特定的文本框是否为空。如果不是,它将尝试将数据插入数据库。但是,如果数据库包含与文本框中键入的数据类似的数据,则它们将分别提示不同的错误。不幸的是,对我来说,我甚至无法插入任何数据,也没有错误表明文本框和数据库中的数据是相同的

protected void btnAdd_Click(object sender, EventArgs e)
    {
        if (tbpid.Text.Equals(""))
        {
            lbmsg.Text = "Please generate a police ID for this account";
        }
        else if (tbfullname.Text.Equals(""))
        {
            lbmsg.Text = "Please type the full name of the police officer";
        }
        else if (tbnric.Text.Equals(""))
        {
            lbmsg.Text = "Please enter the NRIC of the police officer";
        }
        else if (ddllocation.SelectedValue.Equals("Select Location"))
        {
            lbmsg.Text = "Please select the location of the policepost he will be posted to";
        }
        else { 
        SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI");
        con.Open();
        SqlCommand select = new SqlCommand("Select policeid, nric from PoliceAccount where policeid = @policeid", con);
        SqlDataReader dr;
select.Parameters.AddWithValue("@policeid", tbpid.Text);
        dr = select.ExecuteReader();
        if (dr.Read())
        {
            if (tbpid.Equals(dr["policeid"].ToString()))
            {
                lbmsg.Text = "Police ID already exists. Please generate another new Police ID";
            }
            else if (tbnric.Equals(dr["nric"].ToString()))
            {
                lbmsg.Text = "NRIC already exists. Please ensure the NRIC is correct";
            }
        }
        else
        {
            SqlConnection conn = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI");
            conn.Open();
            SqlCommand cmd = new SqlCommand("insert into PoliceAccount(policeid, password, nric, fullname, postedto)  values('" + tbpid.Text.Trim() + "','" + tbpid.Text.Trim() + "','" + tbnric.Text.Trim() + "','" + tbfullname.Text.Trim() + "', '" + ddllocation.SelectedValue + "')", conn);
            cmd.ExecuteNonQuery();
            conn.Close();
            Response.Redirect("AdminAddAccount");
        }
        }
    }

请参阅此[线程获取正确答案][1]

无法在数据库中插入和检查类似的数据

它永远不会进入else来插入数据,因为您的select语句没有经过筛选。此声明:

Select policeid, nric from PoliceAccount

将返回该表中的所有行。然而,你真正想要的是:

Select policeid, nric from PoliceAccount where policeid = @policeid

然后,在执行阅读器之前,添加这行代码:

select.Parameters.AddWithValue("@policeid", tbpid.Text);

最后,在insert语句中使用相同的参数化语法,它可以安全地避免SQL注入。

解决方案所说的是正确的。还要在代码中的cmd.ExecuteNonQuery();之前添加cmd.CommandType = CommandType.Text;

此外,我认为您应该在此处添加.aspx Response.Redirect("AdminAddAccount.aspx");