添加主键时出现SQL错误

时间:2018-03-14 18:12:18

标签: c# arrays sql-server executenonquery

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

  

发生了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();
}

1 个答案:

答案 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?