0

我试图确保用户不会插入数据库中已经存在的数据。

我使用 datareader 从 SQL 服务器读取数据。

protected void btnAdd_Click(object sender, EventArgs e)
    {
        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.Text.Equals(dr["policeid"].ToString()) && (tbnric.Text.Equals(dr["nric"].ToString())))
                {

                    lbmsg.Text = "This police account has already exist. Please verify the details again.";

                }
                else if (tbpid.Text.Equals(dr["policeid"].ToString()))
                {
                    lbmsg.Text = "This police ID has already exists. Please generate another";
                }
                else if (tbnric.Text.Equals(dr["nric"].ToString()))
                {
                    lbmsg.Text  ="This NRIC has already exist. Please ensure that 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();

            lbmsg.Text = "Congratulations. The police account of ID " + tbpid.Text + " has been successfully added. You may edit the profile via the edit profile tab above";

            tbpid.Text = "";
            tbnric.Text = "";
            tbfullname.Text = "";
            ddllocation.SelectedValue = "Select Location";


        }

        }

但是,尽管将相同的policeID放入数据库中已经存在的文本框中,但没有出现错误消息“Police ID already exists”并且插入数据失败。

但是,当我输入不同的 PoliceID 但相同的 NRIC 时,没有出现错误消息,但数据插入成功。

我只是想知道为什么我的错误消息没有出现,尽管警察 ID 相同。

更新

我已经添加了

.Text

进入我的 ID 检查,只出现一条错误消息。

但是,当我添加.Text到 NRIC 时,发生了一些奇怪的事情。当我输入相同的 ID 但不同的 NRIC 时,主键错误出现在我的 VS2012 上(显然这是因为我在 pid 上添加了主键约束),这意味着它完全忽略了我的重复检查。但是,当我键入不同的 ID 但相同的 NRIC 时,信息已提交到数据库中。这完全忽略了我所做的 NRIC 检查。

我仍然很想知道为什么会这样。

正确答案请参考本帖

4

1 回答 1

2

在行中

if (tbpid.Equals(dr["policeid"].ToString()))

你忘了.Text

if (tbpid.Text.Equals(dr["policeid"].ToString()))

检查身份证也是一样

而关于

但是,当我键入不同的 PoliceID 但相同的 NRIC 时,没有出现错误消息,但数据插入成功。

我想你的表对列有 uniq 约束policeid,但不是nric

于 2013-07-29T04:41:48.153 回答