2016-05-10 2 views
1

Я хотел бы вставить запись в таблицу RDV.Нарушение ограничений основного ключа WindowsForms

Это создание запроса из моей таблицы

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, я хочу, чтобы добавить его, но должны быть скрыты и Random, как в коде выше.

Когда я запускаю свой проект, он показывает мне ошибку Нарушение ПЕРВИЧНОГО КЛЮЧА «PK_RDV». Невозможно вставить повторяющийся ключ в объект "dbo.RDV» Значение дубликатом ключа:. 1505 (это значение idRdv)

Pleaaaaseee, помогите мне Как я должен это исправить

Заранее спасибо

..
+0

У вас есть один первичный ключ на этой таблице. Это означает, что вы не можете вставить одно и то же значение дважды. Вы пытаетесь это сделать. Как его исправить? Не пытайтесь вставить это же значение снова. Это так просто. Вопрос _real_: как вы убедитесь, что этого не повторится? Ответ на этот вопрос: подумайте еще раз о том, как вы создаете свой idRdv. Вставка случайных чисел и наделение того, что она работает, обычно не является хорошей стратегией. – oerkelens

+0

У вас есть другая идея? –

+0

Заполнение технических ключей может быть сделано с помощью базы данных, вы можете сделать это самостоятельно, используя MAX (idRdv) +1, вы можете изменить его на Guid и т. Д. И т. Д. И т. Д. Есть много вариантов для этого, каждый со своими собственные преимущества и недостатки. Вы даже можете использовать случайное число и сначала проверить, существует ли он, а затем обрабатывать ошибку любым способом, который вы хотите. – oerkelens

ответ

1

вы используете идентификатор с Random. Как ваш столбец таблицы идентификатор, содержащий Primary Key Constraint он может получить эту ошибку.

Либо вы убедитесь, что случайное число не существует в таблице перед тем вставкой. Или использовать метод чтобы получить Max(ID)+1 и задать ему как новый ID

+0

Я проверяю t, генерируемое случайное число не существует в таблице. Я не понимаю, как это дублируется! –

+0

Лучше избегать концепции номера «Random» для столбца ID, получить MAX ID + 1 и вставить с этим значением –

+0

Я тестировал с max (idRdv) +1, и это не работает. Аналогичная ошибка показана –

Смежные вопросы