当前位置:编程学习 > C#/ASP.NET >>

表更新的疑问

我有一个表 字段分别为 学号,姓名,班级,身份证号,和报考科目
其中 学号和身份证号是每行数据都是不同的 但是主键是 学号和报考科目
也就是说 同一学生可以报考不同科目
现在我要更新表 更新内容是直接在datagridview中改的 代码如下
 SqlConnection cn = new SqlConnection("server=WINNER;database=shcms;uid=sa;pwd=sa");
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            cmd.CommandText = @"update allstudents set 学号=@学号,姓名=@姓名,班级=@班级,身份证号=@身份证号,报考语种=@报考语种,学制=@学制,入学年份=@入学年份,专业类别=@专业类别 where 身份证号=@身份证号";
            cmd.Parameters.Add("@学号", SqlDbType.Char, 15, "学号");
            cmd.Parameters.Add("@姓名", SqlDbType.VarChar, 30, "姓名");
            cmd.Parameters.Add("@班级", SqlDbType.VarChar,40, "班级");
            cmd.Parameters.Add("@身份证号", SqlDbType.Char, 18, "身份证号");
            cmd.Parameters.Add("@报考语种", SqlDbType.Char, 2, "报考语种");
            cmd.Parameters.Add("@学制", SqlDbType.Int,4, "学制");
            cmd.Parameters.Add("@入学年份", SqlDbType.Char, 4, "入学年份");
            cmd.Parameters.Add("@专业类别", SqlDbType.Char, 4, "专业类别");
            SqlDataAdapter da = new SqlDataAdapter();
            da.UpdateCommand = cmd;
            da.FillLoadOption = LoadOption.OverwriteChanges;
            try
            {
                da.Update(ta5);
                MessageBox.Show("更新成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            dataGridView2.DataSource = ta5;
            现在问题就是 这样一来如果有一个同学选了不同科目 就有两行这个同学的记录 其两行的学号和身份证号是一样的 更新的时候 就会出现主键重复 要怎么才能不重复啊 望高手指点 --------------------编程问答-------------------- 一个人不是只有一个学号吗?怎么会每行都不同呢? --------------------编程问答-------------------- 建三个表一个学生信息表,一个选课信息表,一个学生选课记录表这样就方便了 --------------------编程问答-------------------- 不知道你是想要二行还是一行。如果,只想要一行的话,把原来的数据替换了就行了。
如果想记录变更过程的话,就要再加一个表,把所有的变更过程都这到这个表中。
注意,原表中保存学生的基本情况,新表中只记录学生的ID号和课程。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,