欢迎来到天天文库
浏览记录
ID:56016549
大小:45.00 KB
页数:7页
时间:2020-03-15
《C#中使用ADO-连接SQLServer数据库.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C#中使用ADO.NET连接SQLServer数据库,自动增长字段用作主键,处理事务时的基本方法问题描述:假设在数据库中存在以下两张数据表:User表,存放用户的基本信息,基本结构如下所示: 类型说明ID_Userint自动增长字段,用作该表的主键UserNamevarchar UserDepart表,存放用户所拥有的部门(我们假设一个用户拥有多个部门,虽然听起来有点别扭,此处仅作示例,可以理解为一个用户拥有多个职位等等),该表的基本结构如下所示: 类型说明ID_UserDepartint自动增长字段,用作该表的主键ID_Userint用户编号ID_Depar
2、tint部门编号 向数据库中插入一条用户信息的时候,为了保证数据的一致性,必须使用事务的方式“同时”操作User表和UserDepart表。先将用户姓名写入User表中,再将其所拥有的部门写入UserDepart表中,使用事务机制保证这两步操作要么同时成功,要么同时失败。问题就出在:第一步操作完成后,我们并不知道该向第二步操作写入的ID_User的值是多少,因为这个值是SQLServer自动生成的。 解决思路:可以借助 SELECTIDENT_CURRENT('User')AS‘NewInsertID’来查询最近一次插入User表的数据的自动编号的值。 程序实
3、现:1publicstructChaos_TranSQLCmd2{3///4///一条SQL语句5///6publicstringstrSQL;78///9///标记该条SQL语句是否需要连接ID_User10///11publicboolbNeedID;12}131415publicvoidChaos_ExecuteSqlTran(ListlistTranSQLCmd,stringstrInsertID_SQL)16{17using(SqlConnecti
4、onChaosSqlConn=newSqlConnection(strSqlConnString))18{19SqlCommandChaosSqlCmd=newSqlCommand();20ChaosSqlCmd.Connection=ChaosSqlConn;21ChaosSqlConn.Open();22SqlTransactionChaosSqlTran=ChaosSqlConn.BeginTransaction();23ChaosSqlCmd.Transaction=ChaosSqlTran;2425try26{27stringmID_User="";2829
5、//先将数据插入User30ChaosSqlCmd.CommandText=strInsertID_SQL;31ChaosSqlCmd.ExecuteNonQuery();3233//再获取ID_User34DataSetds=this.ExecAdapter("selectIDENT_CURRENT('PT_User')as'ID'","T");35DataTabledt=ds.Tables["T"];36if(dt.Rows.Count>0)37{38mID_User=dt.Rows[0]["ID"].ToString();39}4041for(inti=0;i<
6、listTranSQLCmd.Count;i++)42{43//如果队列中的语句需要连接ID,则处理SQL语句后再执行44stringstrSQL="";45if(listTranSQLCmd[i].bNeedID==true)46{47strSQL=string.Format(listTranSQLCmd[i].strSQL,mID_User);48}49else50{51strSQL=listTranSQLCmd[i].strSQL;52}5354ChaosSqlCmd.CommandText=strSQL;55ChaosSqlCmd.ExecuteNonQuer
7、y();56}5758//全部成功执行则提交59ChaosSqlTran.Commit();60}61catch(System.Data.SqlClient.SqlExceptionEx)62{63//发生问题则回滚64ChaosSqlTran.Rollback();65thrownewException(Ex.Message);66}67}68} 测试代码如下:1staticvoidMain(string[]args)2{3try4{5ListChaos_SQLC
此文档下载收益归作者所有