第一范文网 - 专业文章范例文档资料分享平台

C 中使用ADO—NET连接SQLServer数据库

来源:用户分享 时间:2025/6/18 13:01:35 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

C 中使用ADO—NET连接SQLServer数据库

C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法

问题描述:

假设在数据库中存在以下两张数据表:

User表,存放用户的基本信息,基本结构如下所示: 类型 说明

ID_User int 自动增长字段,用作该表的主键 UserName varchar

UserDepart表,存放用户所拥有的部门(我们假设一个用户拥有多个部门,虽然听起来有点别扭,此处仅作示例,可以理解为一个用户拥有多个职位等等),该表的基本结构如下所示:

类型 说明

ID_UserDepart int 自动增长字段,用作该表的主键 用户编号 ID_User int 部门编号 ID_Depart int

向数据库中插入一条用户信息的时候,为了保证数据的一致性,必须使用事务的方式“同时”操作User表和UserDepart表。先将用户姓名写入User表中,再将其所拥有的部门写入UserDepart表中,使用事务机制保证这两步操作要么同时成功,要么同时失败。问题就出在:第一步操作完成后,我们并不知道该向第二步操作写入的ID_User的值是多少,因为这个值是SQL Server自动生成的。

解决思路:

可以借助 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 listTranSQLCmd,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 ChaosSqlCmd.Transaction = ChaosSqlTran; 24 25 try 26 {

27 string mID_User = \29 //先将数据插入User

30 ChaosSqlCmd.CommandText = strInsertID_SQL; 31 ChaosSqlCmd.ExecuteNonQuery(); 32

33 //再获取ID_User

34 DataSet ds = this.ExecAdapter(\

IDENT_CURRENT('PT_User') as 'ID'\ds.Tables[\

36 if (dt.Rows.Count>0) 37 {

38 mID_User = dt.Rows[0][\40

41 for (int i = 0; i < listTranSQLCmd.Count; i++) 42 {

43 //如果队列中的语句需要连接ID,则处理SQL语句后再执行 44 string strSQL = \

45 if (listTranSQLCmd[i].bNeedID==true) 46 {

47 strSQL = string.Format(listTranSQLCmd[i].strSQL, mID_User); 48 }

49 else 50 {

51 strSQL = listTranSQLCmd[i].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 { 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 = \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 = \String which can't be inserted as ID_Depart)\

18 } 19 else 20 {

21 //正常SQL语句

22 nCmd.strSQL = \values ({0},\

24 nCmd.bNeedID = true; 25 Chaos_SQLCmdList.Add(nCmd); 26 }

搜索更多关于: C 中使用ADO—NET连接SQLServer数据库 的文档
C 中使用ADO—NET连接SQLServer数据库.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1xrw96djai8qp2012imx4yj364q3d4011p0_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top