事务处理之连续插入中获取操作1中自动生成的key,用于操作2中的外键
2010-03-15 21:52
405 查看
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot.png)
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot-1.png)
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot-2.png)
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot-3.png)
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot-4.png)
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot-5.png)
![](file:///C:/DOCUME~1/ZHANGY~1/LOCALS~1/Temp/moz-screenshot-6.png)
事务处理过程:
登记人员及其毕业学校,若学校已经存在,则只添加人员,若学校不存在,则添加学校并添加人员
DB:School:sid,name;
People:pid,name,school
(foreign key with school:sid)
![](http://hi.csdn.net/attachment/201003/15/2055773_1268661400IZ5E.jpg)
在一个事务处理中,插入学校后,利用@@IDENTITY,获取最近一个得标识值,赋给一个临时变量,然后再进行人员的插入
添加按钮事件处理过程:
if (txtSchool.Text == "") { using (SqlConnection con = new SqlConnection(CMD.DBHelper.connectionString)) { try { con.Open(); SqlCommand comm = new SqlCommand("insert into test_worker(name,school) values('" + txtName.Text + "',"+ddlSchool.SelectedValue+")", con); int effectedrow = comm.ExecuteNonQuery(); if (effectedrow == 1) ClientScript.RegisterStartupScript(this.GetType(), "", "alert('添加成功');", true); else ClientScript.RegisterStartupScript(this.GetType(), "", "alert('添加失败');", true); } finally { con.Close(); } } } else { using (SqlConnection conn = new SqlConnection(CMD.DBHelper.connectionString)) { conn.Open(); SqlTransaction myTrans = conn.BeginTransaction(); SqlCommand myCommand = new SqlCommand(); myCommand.Connection = conn; myCommand.Transaction = myTrans; try { myCommand.CommandText = "insert into test_school(name) values('" + txtSchool.Text + "');select @@IDENTITY;"; int newId = int.Parse(myCommand.ExecuteScalar().ToString()); myCommand.CommandText = "insert into test_worker(name,school) values('" + txtName.Text + "'," + newId + ")"; myCommand.ExecuteNonQuery(); myTrans.Commit(); } catch (Exception ex) { myTrans.Rollback(); ClientScript.RegisterStartupScript(this.GetType(),"", "alert('添加失败');",true); } finally { conn.Close(); } ClientScript.RegisterStartupScript(this.GetType(), "", "alert('添加成功');", true); } }
相关文章推荐
- JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理
- Mybatis——<selectKey>生成主键/获取插入数据主键
- 【JDBC】——【大文本、二进制、批处理、获取自动生成主键、事务、事务的隔离级别】
- 用于处理JDBC 增删等写操作的事务控制
- mybatis获取插入数据时自动生成的主键id
- 使用pl/sql快速获取表自增主键以外的所有列,用于重新自动生成一次数据主键
- Linq To Sql模式中自动生成T-SQL增删改操作系列~PropertyChanged事件实现在子类中记录属性的变化,在基类中进行统一处理
- C#操作mysql数据库事务以及获取插入数据ID的方法
- JDBC调用存储过程、JDBC事务处理、数据库自动生成的主键
- 在SQL Server 集成服务中自动获取SharePoint的PowerPivot报表的图表并生成PDF及发送邮件的操作!
- JavaWeb学习记录(二十四)——获取插入数据后,自动生成的id值
- sqlSever 存储过程 中 创建 事务(增删改操作),唯一的主键自动生成 (格式:自定义字母+时间+五位数字,例如:S2014103010001)
- 获取程序编译时间, 用于自动生成版本号
- 【JDBC】向数据表插入数据时,自动获取生成的主键
- 关于VS2005中自动生成TableAdapter的事务处理
- VS之版本-获取编译时间-用于自动生成版本号
- 关于VB2005中自动生成TableAdapter的事务处理
- 用于在存储过程中 根据@@error 判断是否要提交事务和提示操作是否成功,便于异常处理
- mysql插入操作中旧数据处理(ignore和on duplicate key update)
- 在程序中使用事务,处理无外键关系的表与表间的操作。