c#中使用ado—连接sqlserver数据库

上传人:xiao****1972 文档编号:84136425 上传时间:2019-03-02 格式:DOC 页数:7 大小:73KB
返回 下载 相关 举报
c#中使用ado—连接sqlserver数据库_第1页
第1页 / 共7页
c#中使用ado—连接sqlserver数据库_第2页
第2页 / 共7页
c#中使用ado—连接sqlserver数据库_第3页
第3页 / 共7页
c#中使用ado—连接sqlserver数据库_第4页
第4页 / 共7页
c#中使用ado—连接sqlserver数据库_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《c#中使用ado—连接sqlserver数据库》由会员分享,可在线阅读,更多相关《c#中使用ado—连接sqlserver数据库(7页珍藏版)》请在金锄头文库上搜索。

1、C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法 问题描述:假设在数据库中存在以下两张数据表:User表,存放用户的基本信息,基本结构如下所示:类型说明ID_Userint自动增长字段,用作该表的主键UserNamevarcharUserDepart表,存放用户所拥有的部门(我们假设一个用户拥有多个部门,虽然听起来有点别扭,此处仅作示例,可以理解为一个用户拥有多个职位等等),该表的基本结构如下所示:类型说明ID_UserDepartint自动增长字段,用作该表的主键ID_Userint用户编号ID_Departint部门编号向数据库中插入一条用

2、户信息的时候,为了保证数据的一致性,必须使用事务的方式“同时”操作User表和UserDepart表。先将用户姓名写入User表中,再将其所拥有的部门写入UserDepart表中,使用事务机制保证这两步操作要么同时成功,要么同时失败。问题就出在:第一步操作完成后,我们并不知道该向第二步操作写入的ID_User的值是多少,因为这个值是SQL Server自动生成的。解决思路:可以借助SELECT IDENT_CURRENT(User) AS NewInsertID 来查询最近一次插入User表的数据的自动编号的值。程序实现: 1 public struct Chaos_TranSQLCmd 2

3、3 / 4 / 一条SQL语句 5 / 6 public string strSQL; 7 8 / 9 / 标记该条SQL语句是否需要连接ID_User10 / 11 public bool bNeedID;12 13 14 15 public void Chaos_ExecuteSqlTran(List listTranSQLCmd,string strInsertID_SQL)16 17 using (SqlConnection ChaosSqlConn = new SqlConnection(strSqlConnString)18 19 SqlCommand ChaosSqlCmd =

4、new SqlCommand();20 ChaosSqlCmd.Connection = ChaosSqlConn;21 ChaosSqlConn.Open();22 SqlTransaction ChaosSqlTran = ChaosSqlConn.BeginTransaction();23 ChaosSqlCmd.Transaction = ChaosSqlTran;24 25 try26 27 string mID_User = ;28 29 /先将数据插入User30 ChaosSqlCmd.CommandText = strInsertID_SQL;31 ChaosSqlCmd.E

5、xecuteNonQuery();32 33 /再获取ID_User34 DataSet ds = this.ExecAdapter(select IDENT_CURRENT(PT_User) as ID, T);35 DataTable dt = ds.TablesT;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

6、 = ;45 if (listTranSQLCmdi.bNeedID=true)46 47 strSQL = string.Format(listTranSQLCmdi.strSQL, mID_User);48 49 else50 51 strSQL = listTranSQLCmdi.strSQL;52 53 54 ChaosSqlCmd.CommandText = strSQL;55 ChaosSqlCmd.ExecuteNonQuery();56 57 58 /全部成功执行则提交59 ChaosSqlTran.Commit();60 61 catch (System.Data.SqlCl

7、ient.SqlException Ex)62 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 Chaos_SQLCmdList = new List(); 6 7 /构造SQL语句向User表中写入数据 8 string strSQL = insert into PT_User (UserName) values (Lee); 9 10 /构造SQL语句向UserD

8、epart表写入数据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 = insert into PT_UserDepart (ID_User,ID_Depart) values (0, + A String which cant be inserted as ID_De

9、part);18 19 else20 21 /正常SQL语句22 nCmd.strSQL = insert into PT_UserDepart (ID_User,ID_Depart) values (0, + i.ToString() + );23 24 nCmd.bNeedID = true;25 Chaos_SQLCmdList.Add(nCmd);26 27 28 DB_Operation.ChaosDbOprt CDO = new DB_Operation.ChaosDbOprt();29 CDO.Chaos_ExecuteSqlTran(Chaos_SQLCmdList, strSQL);30 31 Console.WriteLine(数据写入成功!);32 Console.ReadLine();33 34 catch (Exception ex)35 36 Console.WriteLine(Error:rn+ex.Message);3

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号