簡體   English   中英

C#for循環。 索引超出范圍

[英]C# for loop. Index was outside the bounds

我收到以下錯誤:

指數數組的邊界之外

for循環代碼:

for (int i = 0; i < listEquipment.Items.Count - 1; i++)
{
   SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[EquipmentItems] ([RequestID], [TypeID]) VALUES (@RequestID, @TypeID)", conn);
   cmd.Parameters.Add("@RequestID", SqlDbType.Int).Value = userRequest;
   cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = (listEquipment.SelectedItems[i] as Equipment).equipmentID;
   cmd.ExecuteNonQuery();
}

出現錯誤的行:

cmd.Parameters.Add("@TypeID", SqlDbType.Int).Value = (listEquipment.SelectedItems[i] as Equipment).equipmentID;

請幫忙! 我是編程新手。

您循環所有項目,然后在listEquipment.SelectedItems[i]訪問該索引。 但是可能沒有選擇所有項目,這意味着此集合較小,您無法訪問它。

因此,我假設您不想循環所有項目,而只循環選定的項目,因此請使用:

for (int i = 0; i < listEquipment.SelectedItems.Count; i++)
{

}

更改

for (int i = 0; i < listEquipment.Items.Count - 1; i++)

 for (int i = 0; i < listEquipment.SelectedItems.Count; i++)

您正在尋找這樣的東西(讓我通過以下代碼中的注釋失效):

  //DONE: make sql readable 
  string sql = 
    @"INSERT INTO [dbo].[EquipmentItems] (
        [RequestID], 
        [TypeID]) 
      VALUES (
        @RequestID, 
        @TypeID)";

  // Create command once - use many (within the loop)
  //DONE: wrap IDisposable into using  
  using (SqlCommand cmd = new SqlCommand(sql, conn)) {
    // user request is the same for all the equipment
    cmd.Parameters.Add("@RequestID", SqlDbType.Int).Value = userRequest;
    cmd.Parameters.Add("@TypeID", SqlDbType.Int);

    //DONE: foreach + OfType<> is by far more readable in the context: 
    //     "for each selected equipment execute a query"
    foreach (Equipment equipment in listEquipment.SelectedItems.OfType<Equipment>()) {
      cmd.Parameters["@TypeID"].Value = equipment.equipmentID;

      cmd.ExecuteNonQuery();
    } 
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM