Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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 - Fatal编程技术网

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

如何处理C#中的主键冲突?,c#,sql-server,C#,Sql Server,我正在使用血库管理系统,这是我的插入按钮代码。主键不是手动生成的,因为在插入数百万条记录后,您无法判断手动选择或创建的ID是否重复。这意味着PKs必须始终由数据库或代码自动生成。如果希望由数据库生成,可以使用IDENTITY关键字,然后选择种子(例如:IDENTITY(1,1)),也可以在数据库中创建序列。但是,另一个选项是使用GUID作为键。如果要在数据库中生成GUID类型PKs(尤其是顺序GUID),可以将主键类型设置为UNIQUEIDENTIFIER ROWGUIDCOL,并且可以使用NE

我正在使用血库管理系统,这是我的插入按钮代码。

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

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();

但是,我建议您不要使用
GUID
PK,而是使用数字主键,因为这需要更少的空间,并且它将使插入/更新/删除或级联操作更快

请不要通过连接字符串来构建查询-这会使您容易受到SQL注入的攻击。改为使用准备好的语句。主键冲突?你真的不应该得到一个。数据库应该自动生成ID。或者,如果它是一个表示多个关系的表(在这种情况下,冲突可能是更现实的情况),则a)而不是允许它发生,提前检查该值组合的记录是否不存在,或者b)捕获特定异常并询问用户要做什么-可能它需要更新现有记录而不是新的插入。您正在将
textBox1.Text
作为
donorid
传递,因此您最有可能在其中插入重复项,包括您在此处询问的内容。即使数据库中存在具有相同主键的项,您是否仍要插入项。还是处理异常<代码>尝试..捕获
?请参见
var id = Guid.NewGuid(); // or Guid.NewGuid().ToString();