我正在尝试使用来自列表框的值以及文本框值更新数据库表,但是抛出异常 例外。
甚至在提供参数后也会抛出过程或函数需要参数,但未提供。
。我希望所选的课程显示在数据库表的同一列中,并用逗号分隔。 这就是我到目前为止所拥有的。
SELECT `id`, `type`, `dateadd`, `timeadd`, `versity`, `title`, SUBSTRING_INDEX(`content`,' ',10), `notes` FROM `notices` ORDER BY `notices`.`id` DESC
答案 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 Key, Store 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的地方。
迈克