如何处理C#中的主键冲突?

时间:2018-03-24 20:15:56

标签: c# sql-server

con.Open();

SqlCommand cmd = new SqlCommand(@"INSERT INTO donorinfo (donorid,name,fathersname,age,sex,cnicno,mobileno,dateofbirth,city,address,eyecolor,bloodgroup,dateofdonation) VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + comboBox1.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + dateofbirth.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + comboBox2.Text + "','" + comboBox3.Text + "','" + dateofdonation.Text + "')", con);

cmd.ExecuteNonQuery();
con.Close();

MessageBox.Show("Succesfully saved", "info");
clear();

Display();

我正在研究血库管理系统这里是我的插入按钮代码。

1 个答案:

答案 0 :(得分:0)

主键并不是手动生成的,因为在插入数百万条记录后,您无法判断您手动选择或创建的ID是否重复。这意味着PK必须始终由数据库或代码自动生成。如果您希望数据库生成它,您可以使用IDENTITY关键字然后选择种子(例如:IDENTITY(1,1)),或者您可以在数据库中创建SEQUENCE。但是,另一种选择是使用GUID作为密钥。如果要在数据库中生成GUID类型PK(尤其是顺序GUID),可以将主键类型设置为UNIQUEIDENTIFIER ROWGUIDCOL,并且可以使用NEWSEQUENTIALID()函数创建顺序{ {1}}作为默认值。另一方面,您可以使用以下代码在C#中生成GUID

GUID

但是,我建议您不要使用var id = Guid.NewGuid(); // or Guid.NewGuid().ToString(); PK而是使用数字主键,因为它需要更少的空间,并且它会使插入/更新/删除或级联操作更快。