Я хотел бы вставить запись в таблицу 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, помогите мне Как я должен это исправить
Заранее спасибо
..
У вас есть один первичный ключ на этой таблице. Это означает, что вы не можете вставить одно и то же значение дважды. Вы пытаетесь это сделать. Как его исправить? Не пытайтесь вставить это же значение снова. Это так просто. Вопрос _real_: как вы убедитесь, что этого не повторится? Ответ на этот вопрос: подумайте еще раз о том, как вы создаете свой idRdv. Вставка случайных чисел и наделение того, что она работает, обычно не является хорошей стратегией. – oerkelens
У вас есть другая идея? –
Заполнение технических ключей может быть сделано с помощью базы данных, вы можете сделать это самостоятельно, используя MAX (idRdv) +1, вы можете изменить его на Guid и т. Д. И т. Д. И т. Д. Есть много вариантов для этого, каждый со своими собственные преимущества и недостатки. Вы даже можете использовать случайное число и сначала проверить, существует ли он, а затем обрабатывать ошибку любым способом, который вы хотите. – oerkelens