如何使用c#更新具有listbox值的数据库表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (239)

我试图用来自列表框和TextBox值的值更新数据库表,但是异常被抛出,“Procedure or function expects parameter, which was not supplied.”。即使在提供了参数之后也抛出了异常。我希望所选的类显示在用逗号分隔的数据库表的同一列中。

 using (SqlCommand com = new SqlCommand("updateStudent", connection))
 {

        com.CommandType = CommandType.StoredProcedure;

        com.Parameters.AddWithValue("@studentNum", studentNum.Text);

        com.Parameters.Add("@studentName", SqlDbType.NVarChar).Value = studentName.Text;

        foreach (ListItem item in lstCourse.Items)
        {

             if (item.Selected)
             {

                   com.Parameters.Add("@courses", SqlDbType.NVarChar).Value = " " + item.Text + " ";
              }
         }
         com.ExecuteNonQuery();
         com.Parameters.Clear();
       }
   }
提问于
用户回答回答于

可能的解决办法:

为下一次迭代设置c#代码中的参数之前,我认为你错过了命令。

或:

var myList = new List<string>();
foreach(ListViewItem Item in ListView.SelectedItems)
{
    myList.add(Item.Text.ToString());
}
var myArray = myList.ToArray();
var result = string.Join(",", myArray); 

然后,在存储过程中,可以拆分varchar。

用户回答回答于

不是foreach循环,应该这样做。

// create comma separated list of selected courses
var courses = string.Join(",", lstCourse.Items
                                        .Where(item=>item.Selected)
                                        .Select(s=>s.Text)
                                        .ToList()); 
// add courses as parameter
com.Parameters.Add("@courses", SqlDbType.NVarChar).Value = courses;

过程代码

update Student 
set studentNum=@studentNum,studentName=@studentName,courses=@courses 
where studentId=@studentId`

似乎你没有传递@studentId,这可能是错误消息的原因

Procedure or function expects parameter, which was not supplied.

因此,应该将此参数添加到sql命令中。

com.Parameters.Add("@studentId", SqlDbType.Int).Value = studentId; -- update the dbtype and variable as per your system.

扫码关注云+社区

领取腾讯云代金券