[已解决问题] 急急急求助!两张表的更新
提问时间: 2008-04-18 20:18
浏览:252 次

表A和B,A表有项(姓名,学号,班级)列, B表有(班代码,班级名称,人数)3列

现在我要把B表里 班级2合并到班级1,那么就应该先把2班的人数加到1班,再删除2班这条记录,然后,再把A表中属于2班的学生更新为班

在VS2005里应该怎么做?触发器?存储过程?或者别的方法,希望哪位大侠可以给我详细点的答案,先谢谢了

我想用TextBox1和TextBox2分别输入班级名称(或者班级代码),用Button1实现合并代码

拜托,拜托

  

 

 


提问者:hkunqiong - 初学一级
所有回答(4)
在Button1的Click事件里调用存储过程[sp_updateclass],TextBox1和TextBox2分别输入班级1、班级2代码,作为存储过程的参数(@ClassIDOne,@ClassIDTwo)。

Table_A(表A)字段:
[Name] [varchar](20) NOT NULL 
[ID] [varchar](10) NOT NULL [PRIMARY]
[ClassID] [varchar](10) NOT NULL

Table_B(表B)字段:
[ClassID] [varchar](10) NOT NULL [PRIMARY]
[ClassName] [varchar](50) NOT NULL
[Number] [int]

存储过程[sp_updateclass]执行到数据库(SQL Server 2005 Express下测试通过)
/*
班级2合并到班级1
班级1:@ClassIDOne
班级2:@ClassIDTwo
*/
CREATE PROCEDURE [sp_updateclass]
(
@ClassIDOne varchar(10),
@ClassIDTwo varchar(10)
)
AS
--把2班的人数加到1班
UPDATE
Table_B
SET
Number = Number + ISNULL(
(
SELECT Number FROM Table_B
WHERE ClassID = @ClassIDTwo
),0)
WHERE 
ClassID = @ClassIDOne

--删除2班这条记录
DELETE FROM Table_B WHERE ClassID = @ClassIDTwo

--A表中属于2班的学生更新为1班
UPDATE
Table_A
SET
ClassID = @ClassIDOne
WHERE
ClassID = @ClassIDTwo



*VS2005里的调用方法:
1、首先添加引用
using System.Data.SqlClient;
2、添加Click事件
        protected void Button1_Click(object sender, EventArgs e)
        {
            string strCon = "Data Source=.\\SQLEXPRESS;initial catalog=Test;user id=sa;password=sqlsa;Pooling=true;";
            using (SqlConnection cn = new SqlConnection(strCon))
            {
                cn.Open();
                SqlTransaction tr = null;

                try
                {                    
                    tr = cn.BeginTransaction();// 开始事务

                    using (SqlCommand cm = cn.CreateCommand())
                    {
                        cm.CommandText = "sp_updateclass";
                        cm.CommandType = CommandType.StoredProcedure;
                        cm.Parameters.AddWithValue("@ClassIDOne ", TextBox1.Text.Trim());
                        cm.Parameters.AddWithValue("@ClassIDTwo ", TextBox2.Text.Trim());
                        cm.Transaction = tr;
                        cm.ExecuteNonQuery();

                        tr.Commit();// 提交事务
                        Response.Write("<script>alert('更新成功!')</script>");
                    }
                }
                catch (Exception ex)
                {
                    tr.Rollback();// 回滚事务
                    Response.Write(ex.Message);
                }
            }
        }
2个月前   回答者:PCJIM - 菜鸟二级
上面的差不多!不知道能实现不!
2个月前   回答者:HamunNet - 初学一级
个人觉得最好是用事务,另外我好象在项目中没怎么用过存储过程来,不知道大家在项目中应用的多不多?

2个月前   回答者:张荣华 - 小虾三级
建议不要再C#重管理事务,最好能在存储过程内。
2个月前   回答者:PerfectDesign - 初学一级
评论
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除