Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免数据库中存在重复数据?_C#_Visual Studio - Fatal编程技术网

C# 如何避免数据库中存在重复数据?

C# 如何避免数据库中存在重复数据?,c#,visual-studio,C#,Visual Studio,我有一个数据库,用户可以跟踪进入商店的新模型,但他们只保留每个模型中的一个,我不知道如何阻止用户重复相同的模型。我已经在这个网站上看到了一些以前的答案,但是在我自己的网站上使用这些代码时,我发现了一些错误 private void check_Click(object sender, EventArgs e) { string query = "INSERT INTO tbl_phones(model) VALUES(@model)";

我有一个数据库,用户可以跟踪进入商店的新模型,但他们只保留每个模型中的一个,我不知道如何阻止用户重复相同的模型。我已经在这个网站上看到了一些以前的答案,但是在我自己的网站上使用这些代码时,我发现了一些错误

  private void check_Click(object sender, EventArgs e)
    {
               string query = "INSERT INTO tbl_phones(model) VALUES(@model)";

               using (SqlConnection sqlconn = new SqlConnection(@""))
               using (SqlCommand comm = new SqlCommand(query, sqlconn))
                {
                    sqlconn.Open();
                    comm.Parameters.Add("@model, SqlDbType.NVarChar).Value = phoneinput.Text;

                    comm.ExecuteNonQuery();
这应该有效(获取输入型号的手机数量,如果少于1,则插入)


这里是你可以做很多事情的方法。您可以在表上设置约束,可以在插入前查询数据库,也可以在重复键上设置诸如insert\之类的内容。您应该发布错误并编写它抛出的代码,而不是问这么宽泛的问题。将其设置为主键,以便数据库对每种类型只允许一个值。欢迎!如果存在重复模型,您想做什么?忽略或抛出错误?messagebox可以让用户知道吗?感谢您的帮助,除了ExecuteScalar中的一个错误之外,代码似乎工作正常-是一个在给定上下文中无效的方法,知道这是什么意思吗?与其执行两个查询,不如运行一个调用的查询。合并将插入新记录或更新(如果需要)现有记录。是否复制了我的初始答案?我无意中包括了.ExecuteScalar()两次,现在我已经纠正了这一点。另外,我建议你在我的回答中使用另一种解决方案——主键可能是更好的方法。感谢你的贡献,是的,这就是错误所在。我已将你的解决方案标记为答案。我已经把ID列作为主键了,所以我假设如果我需要链接表,最好还是保持它不变?您所展示的方法之间的主要区别是什么?另外,如果我想弹出一个错误来通知我猜的人,我只是在结尾处添加了一个else语句?对于第一个答案,您只需添加一个else语句并执行您需要执行的操作。这两个选项之间的主要区别在于后者只需运行一个查询,而初始查询则需要运行两个查询,因此如果您能够使用主键(在本例中,您就是主键),我可能会推荐后者。
private void check_Click(object sender, EventArgs e)
{
    string insertQuery = "INSERT INTO tbl_phones(model) VALUES(@model)";
    string checkQuery = "SELECT COUNT(*) FROM tbl_phones WHERE model = @model";

    using (SqlConnection sqlconn = new SqlConnection(@""))
    {
        sqlconn.Open();

        SqlCommand checkCommand = new SqlCommand(checkQuery, sqlconn);
        checkCommand.Parameters.AddWithValue("@model", phoneinput.Text);

        if((int)checkCommand.ExecuteScalar() < 1)
        {
            SqlCommand insertCommand = new SqlCommand(insertQuery, sqlconn);
            insertCommand.Parameters.AddWithValue("@model", phoneinput.Text);
            insertCommand.ExecuteNonQuery();
        }
    }
}
private void check_Click(object sender, EventArgs e)
{
    string insertQuery = "INSERT INTO tbl_phones(model) VALUES(@model)";

    using (SqlConnection sqlconn = new SqlConnection(connectionString))
    {
        sqlconn.Open();

        SqlCommand insertCommand = new SqlCommand(insertQuery, sqlconn);
        insertCommand.Parameters.AddWithValue("@model", "test");

        try
        {
            insertCommand.ExecuteNonQuery();
        }

        catch(SqlException ex)
        {
            if (ex.Number == 2627)
            {
                // Phone already exists, do some stuff
            }

            else throw;
        }
    }
}