表A和B,A表有项(姓名,学号,班级)列, B表有(班代码,班级名称,人数)3列
现在我要把B表里 班级2合并到班级1,那么就应该先把2班的人数加到1班,再删除2班这条记录,然后,再把A表中属于2班的学生更新为班
在VS2005里应该怎么做?触发器?存储过程?或者别的方法,希望哪位大侠可以给我详细点的答案,先谢谢了
我想用TextBox1和TextBox2分别输入班级名称(或者班级代码),用Button1实现合并代码
拜托,拜托
|
在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); } } } 上面的差不多!不知道能实现不! 个人觉得最好是用事务,另外我好象在项目中没怎么用过存储过程来,不知道大家在项目中应用的多不多? 建议不要再C#重管理事务,最好能在存储过程内。 |