如何使用C#使用列表框值更新数据库表

时间:2018-08-10 18:03:55

标签: c# asp.net stored-procedures

我正在尝试使用来自列表框的值以及文本框值更新数据库表,但是抛出异常 例外。

  

过程或函数需要参数,但未提供。

甚至在提供参数后也会抛出

。我希望所选的课程显示在数据库表的同一列中,并用逗号分隔。 这就是我到目前为止所拥有的。

SELECT `id`, `type`, `dateadd`, `timeadd`, `versity`, `title`, SUBSTRING_INDEX(`content`,' ',10), `notes` FROM `notices` ORDER BY `notices`.`id` DESC

3 个答案:

答案 0 :(得分:1)

应该代替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作为参数。可能是错误消息的原因

  

过程或函数需要参数,但未提供。

因此您应该将此参数添加到sql命令

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

答案 1 :(得分:1)

错误是正常的

您不能多次发送具有相同名称的参数来调用存储过程。

如果您需要将课程列表保存到学生实体,则必须更改数据库的结构,并使用带有外键的新表学生表。

查看此文档 Foreing KeyStore Procedure

答案 2 :(得分:1)

我认为@Vinit有做您想做的正确答案。代替您的foreach (ListItem item in lstCourse.Items)

// 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;

它将构建以逗号分隔的课程名称列表,然后将其作为一个@courses参数放入命令中。

但是!!在完成大约20年的工作后,我可以告诉您您并不是真的会喜欢这种方式。您将要把学生选择的课程放在单独的记录中。每次您必须处理这些课程时,都将处理此课程名称集合。 在这种情况下,我要做的是创建一个单独的表,以“多对多”关系将学生加入课程。 顺便说一句-我在您的代码中看不到告诉命令执行什么SP的地方。

迈克