C# C为循环。索引超出了界限

C# C为循环。索引超出了界限,c#,C#,我得到以下错误: 索引超出了数组的边界 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("@Req

我得到以下错误:

索引超出了数组的边界

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();
}
请帮忙!我是编程新手。

改变

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

for(int i=0;i
循环所有项目,然后在
列表设备中访问该索引。选择编辑项[i]
。但可能没有选择所有项目,这意味着此集合较小,您无法访问它

因此,我假设您不想循环所有项目,只想循环选定的项目,因此请使用:

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

}
for(int i=0;i
您正在寻找类似的内容(让我通过下面代码中的注释进行解释):

//完成:使sql可读
字符串sql=
@“插入[dbo]。[EquipmentItems](
[请求ID],
[类型ID])
价值观(
@请求ID,
@类型ID)”;
//创建命令一次-使用多个(在循环中)
//完成:将IDisposable包装为使用
使用(SqlCommand cmd=newsqlcommand(sql,conn)){
//所有设备的用户请求相同
Add(“@RequestID”,SqlDbType.Int).Value=userRequest;
cmd.Parameters.Add(“@TypeID”,SqlDbType.Int);
//完成:foreach+of type在上下文中的可读性要高得多:
//“为每个选定设备执行查询”
foreach(listEquipment.SelectedItems.OfType()中的设备){
cmd.Parameters[“@TypeID”].Value=equipment.equipmentID;
cmd.ExecuteNonQuery();
} 
}

listEquipment.Items.Count
=
listEquipment.SelectedItems.Count
你能不能把你的物品显示在listEquipment
里面?另外,我想你想循环所有物品,所以使用
i
谢谢。我已经做了改变
 for (int i = 0; i < listEquipment.SelectedItems.Count; 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();
    } 
  }