防止用户重复输入数据

时间:2017-01-31 07:09:20

标签: c# sql database

这是一个学生管理系统,定义的管理员可以添加/删除学生和东西,但事情是我无法阻止用户添加具有相同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();
        }
    }

3 个答案:

答案 0 :(得分:1)

  

我无法阻止用户添加具有相同ID /电子邮件的学生

为什么不呢?您可以ALTER您的表并在这些列上添加UNIQUE键或约束,这将确保该列上只存在唯一数据,并且尝试插入重复数据将在您的应用程序代码中引发SQL异常你可以据此处理。

您可以在单个列上定义唯一键,例如unique(id)unique(email)或这些列的组合unique(id, email)

答案 1 :(得分:1)

这是解决这个问题的程序。

  1. 确保数据库表存在唯一性约束
  2. 围绕cmdcommand的执行添加数据库事务,这样您就无法保存其中一个(这非常重要)。
  3. 编译代码,运行代码并尝试保存重复的代码
  4. 观察引发的异常类型
  5. 在事务周围添加一个try / catch块,捕获您在步骤4中记下的异常。

答案 2 :(得分:-2)

在插入

之前检查电子邮件
SELECT studentId FROM student where email=@emailVal

如果找到记录显示错误消息,否则插入记录