SQL 添加主键时出错

SQL Error when adding primary key

当我尝试添加新记录并因此添加主键时,出现错误:

System.Data.SqlClient.SqlException occurred
HResult=0x80131904
Message=Violation of PRIMARY KEY constraint 'PK__Stock__BEAEB27A2652D17F'. Cannot insert duplicate key in object 'dbo.Stock'. The duplicate key value is (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();
}

在您的代码中,您需要增加 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?