我试图确保用户不会插入数据库中已经存在的数据。
我使用 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 检查。
我仍然很想知道为什么会这样。
正确答案请参考本帖