你好!我想请教一下:c#应用程序中:
     比如:我定义了几张表
          学生表(stu):
                      学号:stu_no   char(13)   主键
                   姓名:stu_name varchar(20)
                   性别:stu_sex bit
                  班级号:class_no char(13)
                  专业号:major_no char(13)
       班级表(class):
                  班号:   class_no char(13)
                 班级名称:class_name varchar(20)
                 所属专业:major_no char(13)
       专业表(major):
                   专业号:major_no char(13)
                 专业名称:major_name varchar(20)    
问题有如下:
1、那张学生表里的内容是要呈现给管理员看的,不过在查看浏览的时候应该有:学号,姓名,性别,班级(而不是班号),专业(而不是专业号)。请问这怎么实现??
2、而且当我删除人下专业的时候,其相应的下属:班级 应该也被删除掉,请问这又怎么实现???(所要删除的东西不在一个表里面)
3、当我添加一个学生的时候,我们要添加的一个叫“班级号“的字段,添加的界面是:班级名称。但真正写入表里面的却是这个班级名称的编号。请问这又如何解决??希望能解决这些问题的高手们给点迷津吧!做为一个学生,我向所有求知的人的向你们说声谢谢了!!!

解决方案 »

  1.   

    第一个问题,是不是可以考虑用视图来实现.可以将多个表中的字段选择提取到一个统一的
    视图中.
    第二个问题,你要通过删除学生(主键)来删除与它相关的,班级中的对应字段,考虑采用
    删除的触发器.即当删除学生时发生一组SQL命令.
    第三个问题类似于第二个问题.
      

  2.   

    没分,很郁闷的,嘿嘿。
    我也是初学,仅作参考。第一个问题,用个多表查询就可以了。
    SELECT *
    FROM stu INNER JOIN
          class ON stu.class_no = class.class_no
          INNER JOIN major ON
          stu.major_no = major.major_no第二个问题和第三个问题类似,就是多做条件删除就可以了哦,就用存储过程吧。if exists (select name from sysobjects
    where name = 'prDelete' and type = 'p')
    drop procedure prDelete
    goCREATE PROCEDURE prDelete
    @major_no char(13)  -- 专业号
    ASSET NOCOUNT ONDeclare @intErrorCode int
    Select @intErrorCode = @@ErrorIf @intErrorCode = 0
    Begin TransactionIf @intErrorCode = 0
    Begin
            Delete FROM major WHERE major_no = @major_no
            Select @intErrorCode = @@Error
    EndIf @intErrorCode = 0
    Begin
            Delete FROM class WHERE major_no = @major_no
            Select @intErrorCode = @@Error
    EndIf @intErrorCode = 0 and @@trancount > 0
    Commit Transaction
    Else
    Rollback TransactionReturn @intErrorCodeGoc# 执行SQL 存储过程,书里都有,看看就知道了哦!我也是初学,仅作参考。
      

  3.   

    select stu_no,stu_name,stu_sex,c.class_name,m.mayor_name 
    from stu 
    join class as c on class_no=c.class_no 
    join major as m on major_no=major_no自个试一下看行不行啊..  至于第二三个问题可以用触发器解决的..
      

  4.   

    1.首先确定班号和班级表有外键约束(其实专业号完全没必要,因为通过班级表也可以查到专业), 
    select 学号,姓名,性别,班级名称,专业名称
    from 学生表,班级表,专业表
    where 学生表.班号=班级表.班号 and 学生表.专业号=专业表.专业号2.首先也是确保班级表和专业表有外键约束.可以用触发器也可以用存储过程也可以直接写代码.直接写代码的:--先删除班级
    delete 班级表 where 专业号="你想删除的专业的编号"  --如果你不想输入专业号而想通过输入专业名称来删除的话,可以用子查询先查出专业名称--删除专业
    delete 专业表 where 专业号=      --同上3.你的描述不清楚