C# 当我使用C插入值时,如何检查数据库中是否已经存在值

C# 当我使用C插入值时,如何检查数据库中是否已经存在值,c#,C#,巴兰蒂公开赛 SqlCommand komut = new SqlCommand("insert into RezervasyonKayıt (Rezervasyon_İçerik,Yemek_Tercihi,Kişi_Sayısı,İçecek_Tercihi,Giris_Ekstraları,Yetkili_Kisi,Rezervasyon_Tarihi)values(@İçerik,@Yemek,@Kisi,@İcecek,@Giris,@Yetkili,@RezTarih

巴兰蒂公开赛

        SqlCommand komut = new SqlCommand("insert into RezervasyonKayıt (Rezervasyon_İçerik,Yemek_Tercihi,Kişi_Sayısı,İçecek_Tercihi,Giris_Ekstraları,Yetkili_Kisi,Rezervasyon_Tarihi)values(@İçerik,@Yemek,@Kisi,@İcecek,@Giris,@Yetkili,@RezTarih)", bağlanti);
        komut.Parameters.AddWithValue("@İçerik", comboBox1.SelectedItem);
        komut.Parameters.AddWithValue("@Yemek", comboBox2.SelectedItem);
        komut.Parameters.AddWithValue("@Kisi", comboBox3.SelectedItem);
        komut.Parameters.AddWithValue("@İcecek", comboBox4.SelectedItem);
        komut.Parameters.AddWithValue("@Giris", comboBox5.SelectedItem);
        komut.Parameters.AddWithValue("@Yetkili", comboBox6.SelectedItem);
        komut.Parameters.AddWithValue("@RezTarih", dateTimePicker1.Value);
        komut.ExecuteNonQuery();
        comboBox1.Text = "";
        comboBox2.Text = "";
        comboBox3.Text = "";
        comboBox4.Text = "";
        comboBox5.Text = "";
        comboBox6.Text = "";
        bağlanti.Close();
        XtraMessageBox.Show("Randevu Başarıyla Kayıt Edilmiştir", "Bilgi Mesajı", MessageBoxButtons.OK, MessageBoxIcon.Information);
我试图只检查Rezervasyon_Tarihi,如果它存在于数据库中,我将显示给MessageBox,目前已经存在Rezervasyon

字符串cmd=@SELECT COUNT*来自RezervasyonKayıt,其中Rezervasyonıu Tarihi=@RezTarih

        komut=new SqlCommand(cmd,bağlanti);
        komut.Parameters.AddWithValue("@RezTarih",dateTimePicker1.Value);
        bağlanti.Open();
        int records=(int)komut.ExecuteScalar();

        if (records==0)
        {
            komut.Parameters.Clear();
            cmd=@"insert into RezervasyonKayıt (Rezervasyon_İçerik,Yemek_Tercihi,Kişi_Sayısı,İçecek_Tercihi,Giris_Ekstraları,Yetkili_Kisi,Rezervasyon_Tarihi)values(@İçerik,@Yemek,@Kisi,@İcecek,@Giris,@Yetkili,@RezTarih)";
            komut=new SqlCommand(cmd,bağlanti);
            komut.Parameters.AddWithValue("@İçerik", comboBox1.SelectedItem);
            komut.Parameters.AddWithValue("@Yemek", comboBox2.SelectedItem);
            komut.Parameters.AddWithValue("@Kisi", comboBox3.SelectedItem);
            komut.Parameters.AddWithValue("@İcecek", comboBox4.SelectedItem);
            komut.Parameters.AddWithValue("@Giris", comboBox5.SelectedItem);
            komut.Parameters.AddWithValue("@Yetkili", comboBox6.SelectedItem);
            komut.Parameters.AddWithValue("@RezTarih", dateTimePicker1.Value);
            komut.ExecuteNonQuery();
            comboBox1.Text = "";
            comboBox2.Text = "";
            comboBox3.Text = "";
            comboBox4.Text = "";
            comboBox5.Text = "";
            comboBox6.Text = "";

            XtraMessageBox.Show("Randevu Başarıyla Kayıt Edilmiştir", "Bilgi Mesajı", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }else
        {
            Response.Write("Records Exists");
        }

您可以在插入之前发出选择请求,查看要插入的条目是否已存在。

您可以在插入之前发出选择请求,查看要插入的条目是否已存在。

有两种方法可以执行此操作

首先是在插入之前进行选择,例如

SELECT COUNT(*) FROM .... WHERE .... SOMEID = SOMETHING
请注意,可能会发生这种情况

建议的方法是在ID上定义一个唯一键,插入将由于重复的唯一键异常而失败。捕获该异常并以两种方式显示msgbox

首先是在插入之前进行选择,例如

SELECT COUNT(*) FROM .... WHERE .... SOMEID = SOMETHING
请注意,可能会发生这种情况


建议的方法是在ID上定义一个唯一键,插入将由于重复的唯一键异常而失败。捕获该异常并显示msgbox

您可以在尝试插入新行之前检查特定键/记录是否存在。 例如,您可以事先执行SELECT count*类型的语句,以查看已存在具有相同值的记录。如果此计数大于零,则显示错误消息

请记住,在高度事务性的系统中,从运行检查到几毫秒后尝试插入新记录之间,可能会插入新记录。因此,您可能希望将2条语句包装到1个事务中,或者能够在代码中处理此场景

您还可以考虑添加一个唯一的约束,以保证该表中只能存在1种记录。


更多信息:

您可以在尝试插入新行之前检查特定键/记录的存在。 例如,您可以事先执行SELECT count*类型的语句,以查看已存在具有相同值的记录。如果此计数大于零,则显示错误消息

请记住,在高度事务性的系统中,从运行检查到几毫秒后尝试插入新记录之间,可能会插入新记录。因此,您可能希望将2条语句包装到1个事务中,或者能够在代码中处理此场景

您还可以考虑添加一个唯一的约束,以保证该表中只能存在1种记录。


更多信息:

然后先进行选择。然后再进行选择。我已编辑了“我的问题我有问题”的int records=intkomut.ExecuteScalar;System.Data.Dll中发生类型为“System.Data.SqlClient.SqlException”的未处理异常。这是正确的建议,将两个语句包装在一个事务中。请检查此变量的值是什么样子的:@RezTarih-我怀疑您将其插入SELECT查询的方式是错误的。确保SELECT语句有效,尤其是WHERE子句。还有,为什么您需要最后两个结束括号?我已经编辑了关于int records=intkomut.ExecuteScalar;System.Data.Dll中发生类型为“System.Data.SqlClient.SqlException”的未处理异常。这是正确的建议,将两个语句包装在一个事务中。请检查此变量的值是什么样子的:@RezTarih-我怀疑您将其插入SELECT查询的方式是错误的。确保SELECT语句有效,尤其是WHERE子句。还有,为什么您需要最后两个结束括号?我不推荐这种方法,因为它会导致竞争条件-除非您使用事务。@Guillerme thx指出。编辑答案以表明唯一密钥是推荐的方法。我不推荐这种方法,因为它会导致竞争条件-除非您使用事务。@Guillerme thx指出。编辑答案以指示唯一键是推荐的方式