当我尝试添加新记录并因此添加主键时,我收到错误:
发生了System.Data.SqlClient.SqlException 的HResult = 0x80131904
消息=违反PRIMARY KEY约束' PK__Stock__BEAEB27A2652D17F'。无法在对象' dbo.Stock'中插入重复键。重复键值为(39)。
我确信当前的记录总数是38.主键是从数组中添加的,所有数组的数字都是39-44。
我附上了以下代码:
int y = 0;
SqlCommand orderCommand3 = new SqlCommand();
string conString3 = Properties.Settings.Default.DatabaseEventsUnlimitedConnectionString;
using (SqlConnection connection3 = new SqlConnection(conString3))
{
connection3.Open();
while (ArrayCourseName[y] != "" && y <=5)
{
SqlCommand commandEvent = new SqlCommand("INSERT INTO STOCK (IngredientID, IngredientName, StorageType, QuantityInStock, MinimumRequired) VALUES (@p1, @p2, @p3, @p4, @p5)", connection3);
commandEvent.Parameters.AddWithValue("@p1", ArrayIngredientID[y]);
commandEvent.Parameters.AddWithValue("@p2", ArrayCourseName[y]);
commandEvent.Parameters.AddWithValue("@p3", ArrayStorage[y]);
commandEvent.Parameters.AddWithValue("@p4", ArrayQuantity[y]);
commandEvent.Parameters.AddWithValue("@p5", ArrayMinimum[y]);
int m = commandEvent.ExecuteNonQuery();
if (m != 1)
{
throw new Exception("Too many records changed");
}
i++;
}
connection3.Close();
}
答案 0 :(得分:2)
在您的代码中,您需要增加y
而不是i
的值,因为您使用y
作为索引值。
我建议您使用for
循环将降低代码的复杂性
for(int i=0;i<=5;i++) {
if(string.IsNullOrWhiteSpace(ArrayCourseName[i] ))
break;
///rest of the code
using (SqlConnection connection3 = new SqlConnection(conString3))
{
connection3.Open();
// code for sql non execute
}
}
我建议你每次使用using
连接并创建连接对象,因为连接池每次都会处理连接对象。
参考:Is it better to execute many sql commands with one connection, or reconnect every time?