首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用c#使用列表框更新数据库表

如何使用c#使用列表框更新数据库表
EN

Stack Overflow用户
提问于 2018-08-11 02:03:55
回答 3查看 117关注 0票数 1

我试图用列表框和文本框中的值来更新数据库表,但是异常被抛出了异常。

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

即使在提供参数之后也会抛出。我希望选定的课程显示在数据库表的同一列中,用逗号分隔。这就是我到目前为止所拥有的。

代码语言:javascript
复制
 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();
       }
   }
EN

回答 3

Stack Overflow用户

发布于 2018-08-11 04:36:13

而不是foreach循环,您应该这样做

代码语言:javascript
复制
// 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;

在阅读了您在下面分享了过程代码的注释之后,更新

代码语言:javascript
复制
update Student 
set studentNum=@studentNum,studentName=@studentName,courses=@courses 
where studentId=@studentId`

您似乎没有将@studentId作为参数传递。这可能是出现错误消息的原因

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

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

代码语言:javascript
复制
com.Parameters.Add("@studentId", SqlDbType.Int).Value = studentId; -- update the dbtype and variable as per your system.
票数 1
EN

Stack Overflow用户

发布于 2018-08-11 04:39:55

错误是正常的

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

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

请查看此文档Foreing KeyStore Procedure

票数 1
EN

Stack Overflow用户

发布于 2018-08-11 06:27:01

我认为@Vinit有正确的答案来做你想做的事情。你想要这个来代替你的foreach (ListItem item in lstCourse.Items)

代码语言:javascript
复制
// 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的地方。

麦克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51791871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档