数据访问层使用对象方式同时插入多条数据

时间:2021-08-28 21:41:05

插入一条数据并获得返回该数据的主键。

 1 public int SendMessage(InternalMessage IM, string[] IMPStaffID)
2 {
3 //数据库连接属性 引用using System.Data.SqlClient;
4 using (SqlConnection IDbCon = new SqlConnection(ConfigureHelp.Connection))
5 {
6 //数据库连接
7 IDbCon.Open();
8 //开启事务。需引用using System.Data;
9 IDbTransaction _tran = IDbCon.BeginTransaction();
10
11 //OUTPUT INSERTED.IMID :返回插入这条数据的主键IMID。
12 string InsertIMsql = @"INSERT INTO InternalMessage(IMIsIncognito,IMType,IMObjectNum,IMContent,IMFile,IMIsLock,IMDelFlag,IMStaffID,IMDate) OUTPUT INSERTED.IMID VALUES(@IMIsIncognito,@IMType,@IMObjectNum,@IMContent,@IMFile,@IMIsLock,@IMDelFlag,@IMStaffID,@IMDate)";
13
14 string InsertIMPsql = @"INSERT INTO IMPermissions(IMPStaffID,InternalMessageID) VALUES(@IMPStaffID,@InternalMessageID)";
15 try
16 {
17 var IMID = IDbCon.ExecuteScalar<long>(InsertIMsql, IM,_tran);
18
19 //将数组循环添加到imp对象中
20 IList<IMPermissions> imp = new List<IMPermissions>();
21 for (int i = 0; i < IMPStaffID.Length; i++)
22 {
23 IMPermissions imps = new IMPermissions();
24 long tId = 0;
25 if (long.TryParse(IMPStaffID[i], out tId))
26 {
27 imps.IMPStaffID = tId;
28 imps.InternalMessageID = IMID;
29 imp.Add(imps);
30 };
31 }
32
33 if(IMID > 0)
34 {
35 //imp是个对象,同时插入多条数据
36 var IMPcount = IDbCon.Execute(InsertIMPsql, imp, _tran);
37 if(IMPcount >0)
38 {
39 _tran.Commit();
40 return 1;
41 }
42 }
43 _tran.Rollback();
44 return 0;
45
46 }
47 catch (Exception ex)
48 {
49 UtilityHelp.WriteLog(ex, ex.ToString());
50 return -1;
51 }
52 }
53 }