C# 我不知道该写什么来防止数据库C中的重复/相同记录

C# 我不知道该写什么来防止数据库C中的重复/相同记录,c#,sql,C#,Sql,因此,在插入新记录时,我需要这些代码来防止重复记录。 基本上,当我尝试插入一个新标签时,首先应该检查数据库中是否已经存在该记录 这是按钮代码: private void newBtn_Click_1(object sender, EventArgs e) { Check_Item(); con = new SqlConnection(cs); con.Open(); adapt = new SqlDataAdapter("INSERT INTO tbl_list (Label)

因此,在插入新记录时,我需要这些代码来防止重复记录。 基本上,当我尝试插入一个新标签时,首先应该检查数据库中是否已经存在该记录

这是按钮代码:

private void newBtn_Click_1(object sender, EventArgs e) {
  Check_Item();
  con = new SqlConnection(cs);
  con.Open();
  adapt = new SqlDataAdapter("INSERT INTO tbl_list (Label) VALUES ('" + lblBox.Text + "')", 
                              con);
  adapt.SelectCommand.ExecuteNonQuery();
  con.Close();
  MessageBox.Show("New Data Added Successfully", 
                  "Notice", 
                  MessageBoxButtons.OK, 
                  MessageBoxIcon.Information);
  clearEditTab();
}

我不知道在Check_项中写什么,您可以将tbl_list Label列声明为主键,也可以遍历Label列中的所有数据

您可以通过SqlCommand和更多Sql使用此代码:

private void newBtn_Click(object sender, EventArgs e)
        {  
            //No Need : Check_Item();         
            SqlCommand cmd = new SqlCommand(); 
            con = new SqlConnection(cs);
            cmd.Connection = con;
            cmd.CommandText = "IF NOT EXISTS(select * from tbl_list where Label = '" + lblBox.Text + "') begin INSERT INTO tbl_list(Label) VALUES('" + lblBox.Text + "') end";
            try
            {
                con.Open();

                int affected=cmd.ExecuteNonQuery();
                if (affected > 0)
                {
                    MessageBox.Show("New Data Added Successfully",
                              "Notice",
                              MessageBoxButtons.OK,
                              MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Duplicate Data",
                              "Notice",
                              MessageBoxButtons.OK,
                              MessageBoxIcon.Information);
                }
            }
            catch(SqlException err)
            {
                MessageBox.Show(err.Message,
                         "Error",
                         MessageBoxButtons.OK,
                         MessageBoxIcon.Error);
            }
            finally
            {
                con.Close();
            }           

            clearEditTab();
        }
或者您可以使用存储过程:

我建议您阅读这篇文章,这样会更有意义。无论如何,这篇文章都应该可读性很好,而且如果该网站不存在,到处都有简洁的教程,但是,除了设置数据库连接工厂的几行之外,这几乎就是让dapper计算X在表中出现的次数所需的全部,如果计数为零,则插入一条记录:

var result = dapper.ExecuteScalar<int>("select count(*) from tbl_List where label = @p", new { p = lblBox.Text });

if(result == 0)
  dapper.Insert(new tbl_List(){ Label = lblBox.Text });
else
  MessageBox.Show("Label exists");
Dapper是一种设备,它可以将所有类型良好的对象(如Person)及其FirstName和LastName属性映射到名为Person的数据库表,该表具有FirstName和LastName列。您可以使用一些SQL查询person表,并返回一个列表或person对象。创建一个新的Person对象并将其传递给Insert,Dapper会亲自创建一个新记录以匹配它

我建议你使用它,因为你看起来像是懂一点sql,它没有EF那么重,而且很容易快速入门,它将为你节省大量时间,不正确地使用数据适配器和连接等,并阻止你编写容易发生注入攻击的代码


诚实;所有你需要阅读的是该教程网站的第一页。如果它不能让你去见鬼,我会很惊讶是的,这将改变我的数据库生活,只需2分钟

阅读主键,唯一的约束和唯一的索引。几乎所有的代码都是乱七八糟的-DataAdapter并不意味着要在其select命令中插入一个insert,它们为您管理连接的打开和关闭,并且使用字符串concat构建sql字符串会使您面临注入黑客攻击。你考虑过用整洁的衣服吗?它会清理一下你的代码,并带走所有这些手动的低级数据库的东西。对不起,我对所有这些编码的东西都很陌生,我从youtube上的一些印度家伙那里学到的东西。如果你们能教我或推荐我如何使我的代码更好,请让我知道我已经在其他列上使用了主键,并在其他代码上使用了主键,这样…你们可以遍历Label列中的所有数据。并检查数据库中是否存在新数据。从表中选择Label列中的所有数据,然后就可以了轻松检查数据重复。如果您需要此操作的代码,请告诉我。+1用于工作,因为它解决了主要问题,但此实现仍然存在很多问题,特别是在明显的SQL注入缺陷方面。无论这篇文章是否比第一篇文章好,是否有助于OP提高他的理解力,你都应该警告他,我们不建议他在任何严肃的使用中使用这篇文章。另外一篇文章是文档链接!