2022年C#中使用ADO—NET连接SQLServer数据库 .pdf
《2022年C#中使用ADO—NET连接SQLServer数据库 .pdf》由会员分享,可在线阅读,更多相关《2022年C#中使用ADO—NET连接SQLServer数据库 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C# 中使用 ADO.NET连接 SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法问题描述:假设在数据库中存在以下两张数据表:User 表,存放用户的基本信息,基本结构如下所示:类型说明ID_User int 自动增长字段,用作该表的主键UserName varchar UserDepart表,存放用户所拥有的部门(我们假设一个用户拥有多个部门,虽然听起来有点别扭,此处仅作示例,可以理解为一个用户拥有多个职位等等),该表的基本结构如下所示:类型说明ID_UserDepart int 自动增长字段,用作该表的主键ID_User int 用户编号ID_Depart int 部
2、门编号向数据库中插入一条用户信息的时候,为了保证数据的一致性,必须使用事务的方式“ 同时 ”操作 User 表和 UserDepart表。先将用户姓名写入User 表中,再将其所拥有的部门写入UserDepart表中, 使用事务机制保证这两步操作要么同时成功,要么同时失败。 问题就出在:第一步操作完成后,我们并不知道该向第二步操作写入的ID_User的值是多少,因为这个值是SQL Server自动生成的。解决思路:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 -
3、 - - - - - - - - 可以借助SELECT IDENT_CURRENT(User) AS ,NewInsertID? 来查询最近一次插入User 表的数据的自动编号的值。程序实现: 1 public struct Chaos_TranSQLCmd 2 3 / 4 / 一条 SQL 语句 5 / 6 public string strSQL; 7 8 / 9 / 标记该条 SQL 语句是否需要连接ID_User 10 / 11 public bool bNeedID; 12 13 14 15 public void Chaos_ExecuteSqlTran(List listTran
4、SQLCmd,string strInsertID_SQL) 16 17 using (SqlConnection ChaosSqlConn = new SqlConnection(strSqlConnString) 18 19 SqlCommand ChaosSqlCmd = new SqlCommand(); 20 ChaosSqlCmd.Connection = ChaosSqlConn; 21 ChaosSqlConn.Open(); 22 SqlTransaction ChaosSqlTran = ChaosSqlConn.BeginTransaction(); 23 ChaosSq
5、lCmd.Transaction = ChaosSqlTran; 24 25 try 26 27 string mID_User = ; 28 29 /先将数据插入User 30 ChaosSqlCmd.CommandText = strInsertID_SQL; 31 ChaosSqlCmd.ExecuteNonQuery(); 32 33 /再获取 ID_User 34 DataSet ds = this.ExecAdapter(select IDENT_CURRENT(PT_User) as ID, T); 35 DataTable dt = ds.TablesT; 名师资料总结 - -
6、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 36 if (dt.Rows.Count0) 37 38 mID_User = dt.Rows0ID.ToString(); 39 40 41 for (int i = 0; i listTranSQLCmd.Count; i+) 42 43 /如果队列中的语句需要连接ID ,则处理 SQL 语句后再执行44 string strSQL = ; 45 if (listTranSQLCmdi.bNeed
7、ID=true) 46 47 strSQL = string.Format(listTranSQLCmdi.strSQL, mID_User); 48 49 else 50 51 strSQL = listTranSQLCmdi.strSQL; 52 53 54 ChaosSqlCmd.CommandText = strSQL; 55 ChaosSqlCmd.ExecuteNonQuery(); 56 57 58 /全部成功执行则提交59 ChaosSqlTran.Commit(); 60 61 catch (System.Data.SqlClient.SqlException Ex) 62
8、63 /发生问题则回滚64 ChaosSqlTran.Rollback(); 65 throw new Exception(Ex.Message); 66 67 68 测试代码如下: 1 static void Main(string args) 2 3 try 4 5 List 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - Chaos_SQLCmdList = new List(); 6 7 /构造 SQL 语句向 User
9、表中写入数据 8 string strSQL = insert into PT_User (UserName) values (Lee); 9 10 /构造 SQL 语句向 UserDepart表写入数据11 for (int i = 0; i 10; i+) 12 13 DB_Operation.ChaosDbOprt.Chaos_TranSQLCmd nCmd = new DB_Operation.ChaosDbOprt.Chaos_TranSQLCmd(); 14 if (i=6) 15 16 /构造错误 SQL 语句,使写入数据库的操作不能成功执行17 nCmd.strSQL = in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C#中使用ADONET连接SQLServer数据库 2022 C# 使用 ADO NET 连接 SQLServer 数据库
限制150内