C# 违反主键约束窗体
我想在我的RDV表中插入一条记录 这是我的表的查询创建C# 违反主键约束窗体,c#,sql-server,winforms,C#,Sql Server,Winforms,我想在我的RDV表中插入一条记录 这是我的表的查询创建 CREATE TABLE [dbo].[RDV] ( [idRdv] INT NOT NULL, [objet] NVARCHAR (50) NULL, [objectif] NVARCHAR (50) NULL, [DateRdv] DATETIME NULL, [commentaire] NVARCHAR (50) NULL, [archive] NVARCHA
CREATE TABLE [dbo].[RDV] (
[idRdv] INT NOT NULL,
[objet] NVARCHAR (50) NULL,
[objectif] NVARCHAR (50) NULL,
[DateRdv] DATETIME NULL,
[commentaire] NVARCHAR (50) NULL,
[archive] NVARCHAR (50) NULL,
[idClient] INT NULL,
[idUser] INT NULL,
[idResultat] INT NULL,
CONSTRAINT [PK_RDV] PRIMARY KEY CLUSTERED ([idRdv] ASC),
FOREIGN KEY ([idClient]) REFERENCES [dbo].[Client] ([idClient]),
FOREIGN KEY ([idUser]) REFERENCES [dbo].[User] ([idUser]),
FOREIGN KEY ([idResultat]) REFERENCES [dbo].[Resultat] ([idResultat]);
这是我的插入代码
public RDV()
{
InitializeComponent();
textBox3.Visible = false;
label7.Visible = false;
}
private void btnAdd_Click(object sender, EventArgs e)
{
Random rdm = new Random();
int num = rdm.Next(5, 2000);
textBox3.Text = num.ToString();
string cmdStr = "Insert into RDV (idRdv,idUser,idClient,objet,objectif,DateRdv,commentaire) select @idRdv,@idUser,@idClient,@objet,@objectif,@DateRdv,@commentaire from RDV, Client, [User] where RDV.idClient = Client.idClient and RDV.idUser = [User].idUser ";
SqlConnection con = new SqlConnection("Data Source=ADMIN-PC\\SQLEXPRESS;Initial Catalog=timar;Integrated Security=True");
SqlCommand cmd = new SqlCommand(cmdStr, con);
cmd.Parameters.AddWithValue("@idRdv", textBox3.Text);
cmd.Parameters.AddWithValue("@idUser", (comboBox1.SelectedValue));
cmd.Parameters.AddWithValue("@idClient", (comboBox2.SelectedValue));
cmd.Parameters.AddWithValue("@objet", textBox1.Text);
cmd.Parameters.AddWithValue("@objectif", textBox2.Text);
cmd.Parameters.AddWithValue("@DateRdv", dateTimePicker1.Value.ToString());
cmd.Parameters.AddWithValue("@commentaire", textBox4.Text);
con.Open();
int LA = cmd.ExecuteNonQuery();
Console.WriteLine("Ligne ajoutée: {0}", LA);
而且,字段idRdv,我想添加它,但应该像上面的代码一样隐藏和随机
当我运行我的项目时,它会显示一个违反主键“PK_RDV”的错误。无法在对象“dbo.RDV”中插入重复键。重复键的值:1505(这是idRdv的值)
请帮帮我,我该怎么纠正呢
提前感谢您正在将ID与
随机
一起使用。由于您的表ID列包含主键约束
,因此可能会出现此错误
您可以在插入之前检查生成的随机数是否不存在于表中。或者使用方法获取
Max(ID)+1
并将其设置为新ID我检查t,生成的随机数在表中不存在。我不明白它是如何重复的!!最好避免ID列的随机
数字概念,获取最大ID+1并插入我用MAX(idRdv)测试过的值+1但它不起作用。显示的相同错误是string cmdStr=“插入RDV(IDDV、idUser、idClient、objet、objet、OBJECT、objet、OBJECT、DateRdv、commentaire)选择max(@IDDV)+1、@idUser、@idClient、@objet、@OBJECT、@commentaire from RDV、Client、[User],其中RDV.idClient=Client.idClient和RDV.idUser=[User].idUser]";代码>我现在已删除数据库中的所有记录,因此无法将值NULL插入“idRdv”列table“您在该表上有一个主键。这意味着不能将同一个值插入两次。你正试图这么做。你应该如何纠正它?不要再次尝试插入相同的值。就这么简单。真正的问题是,你如何确保这种情况不再发生?答案是:再想想如何生成idRdv。插入随机数并希望它正常工作通常不是一个好策略。请问,您还有其他想法吗?填充技术密钥可以由数据库完成,您可以使用MAX(idRdv)+1自己完成,您可以将其更改为Guid,等等。。这方面有很多选择,每个都有各自的优缺点。您甚至可以使用一个随机数,首先检查它是否存在,然后以任何方式处理错误。