Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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#_Sql Server_Winforms - Fatal编程技术网

C# 违反主键约束窗体

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

我想在我的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]     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,等等。。这方面有很多选择,每个都有各自的优缺点。您甚至可以使用一个随机数,首先检查它是否存在,然后以任何方式处理错误。