asp.net检查是否在插入表之前存在主键

asp.net检查是否在插入表之前存在主键,asp.net,sql,insert,primary-key,Asp.net,Sql,Insert,Primary Key,正在寻找一种简单的方法,在插入表之前检查表中是否已经存在主键。其中Fname是表中的主键 SqlConnection conn = new SqlConnection(connStr); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "INSERT INTO [table] ([firstName], [lastName]) VALUES ('" + txtFNam

正在寻找一种简单的方法,在插入表之前检查表中是否已经存在主键。其中Fname是表中的主键

SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO [table] ([firstName], [lastName]) VALUES ('" + txtFName.Text + "','" + txtLName.Text + "')";        

cmd.ExecuteNonQuery();
conn.Close();

一般来说,您应该尝试插入。如果存在密钥,dbms将返回一个错误。抓住那个错误

无论如何,您都必须捕获错误,因为除了主键约束之外,还有很多东西可以阻止插入行。其中

  • 任何其他类型的约束,如外键约束、检查约束等
  • 磁盘错误
  • 网络错误
  • 飓风
捕获错误不会损失任何效率

  • 插入(无错误)需要往返数据库一次
  • 插入(带有错误,您会捕获错误)需要一次到数据库的往返,而不计算您可能需要做什么来纠正错误。如果你先检查的话,你就必须做所有的更正
  • 检查然后插入需要两次往返数据库

如果尝试插入已存在主键的行,某些平台可以合并数据。最著名的(或最臭名昭著的,取决于你的观点)是。

我的一个客户是一家试验工厂。他们发生了一次爆炸,把螺栓扔了将近20英里。另一次,一台柴油发电机爆炸导致市区约一平方英里的电力中断。所以要抓住这些错误。我就是这么说的。