这是一个学生管理系统,定义的管理员可以添加/删除学生和东西,但事情是我无法阻止用户添加具有相同ID /电子邮件的学生。还有其他帖子,但我无法和#39; t让它工作。我想在用户尝试输入现有值时给用户提供错误消息。谢谢你的帮助。
private void populateGrid()
{
string query = "SELECT studentId,fname,lname,email,phone FROM student";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
var dersler = new DataTable();
adapter.Fill(dersler);
bindingSource1.DataSource = dersler;
dataGridView1.DataSource = bindingSource1;
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
string query ="INSERT INTO student(studentId,fname,lname,email,phone) VALUES (@studentIdVal,@fnameVal,@lnameVal,@emailVal,@phoneVal)";
string query1 = "INSERT INTO loginusers(username,upassword) VALUES (@emailVal,@phoneVal)";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
using (SqlCommand cmd = new SqlCommand(query1, connection))
{
connection.Open();
cmd.Parameters.AddWithValue("@emailVal", txtEmail.Text);
cmd.Parameters.AddWithValue("@phoneVal", txtPhone.Text);
command.Parameters.AddWithValue("@studentIdVal", txtStudentId.Text);
command.Parameters.AddWithValue("@fnameVal", txtFname.Text);
command.Parameters.AddWithValue("@lnameVal", txtLname.Text);
command.Parameters.AddWithValue("@emailVal", txtEmail.Text);
command.Parameters.AddWithValue("@phoneVal", txtPhone.Text);
cmd.ExecuteNonQuery();
command.ExecuteNonQuery();
populateGrid();
}
}
答案 0 :(得分:1)
我无法阻止用户添加具有相同ID /电子邮件的学生
为什么不呢?您可以ALTER
您的表并在这些列上添加UNIQUE
键或约束,这将确保该列上只存在唯一数据,并且尝试插入重复数据将在您的应用程序代码中引发SQL异常你可以据此处理。
您可以在单个列上定义唯一键,例如unique(id)
和unique(email)
或这些列的组合unique(id, email)
答案 1 :(得分:1)
这是解决这个问题的程序。
cmd
和command
的执行添加数据库事务,这样您就无法保存其中一个(这非常重要)。答案 2 :(得分:-2)
在插入
之前检查电子邮件SELECT studentId FROM student where email=@emailVal
如果找到记录显示错误消息,否则插入记录