C#和sqlserver的事物

sql的事务

sql
create database model
go
use model
go
create table Stu(
id int ,
name varchar(200)
)
go
select * from Stu
go
begin transaction cc
begin 
 --print @@Trancount
 insert into Stu (id,name) values(1,'33')
 insert into Stu (id,name) values('sd','66')    
 if @@error>0 
    rollback transaction cc
    
 else 
    commit transaction cc  
end 
go

c#的事务

创建一个应用台控件程序

static void Main(string[] args)
        {
            using (SqlConnection sqlcon = new SqlConnection(@"server=192.168.3.11;database=model;uid=sa;pwd="))
            {
                sqlcon.Open();
                SqlTransaction  objtran;
                objtran = sqlcon.BeginTransaction("Method");
                SqlCommand objcmd = new SqlCommand();
                objcmd.Connection = sqlcon;
                objcmd.Transaction = objtran;                
                try
                {
                    objcmd.CommandText = "insert into Stu (id,name) values(1,'33')";                    
                    object a = objcmd.ExecuteScalar();                    
                    objcmd.CommandText = "insert into Stu (id,name) values(2,'66')";                    
                    a = objcmd.ExecuteScalar();  
                    objcmd.ExecuteScalar(); 
                    Console.WriteLine(a.ToString());                   
                    objtran.Commit();

                }
                catch(Exception ex)
                {
                    objtran.Rollback();
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();
                }
            }
            Console.ReadLine();
        }
批量插入

public void SaveTcpData(DataFormateModel DFM)
       {
           using (SqlConnection _strCon = new SqlConnection(SqlHelper.SqlConnStr))
           {
               _strCon.Open();
               using (SqlTransaction _sqlTransaction = _strCon.BeginTransaction("Method"))
               {
                   SqlCommand _sqlCommand = new SqlCommand();
                   _sqlCommand.Connection = _strCon;
                   _sqlCommand.Transaction = _sqlTransaction;
                   try
                   {
                       _sqlCommand.CommandText = "insert into PointTcpData (PointTcpData_pointID,PointTcpData_X,PointTcpData_Y,PointTcpData_Z,SavaeTime) values ("
                                                   + DFM.PointID + "," + DFM.PointX + "," + DFM.PointY + "," + DFM.PointZ + ",'" + DateTime.Now.ToString() + "')  select   @@IDENTITY   as   'Identity'";       
                       int _identityID = Convert.ToInt32(_sqlCommand.ExecuteScalar());
                       DataTable _dt = new DataTable();
                       _dt.Columns.Add(new DataColumn("PointTcpDataAttach_ID", typeof(int)));
                       _dt.Columns.Add(new DataColumn("PointTcpDataID", typeof(int)));
                       _dt.Columns.Add(new DataColumn("PointTcpDataAttach_Gold", typeof(float)));
                       _dt.Columns.Add(new DataColumn("PointTcpDataAttach_Max", typeof(float)));
                       _dt.Columns.Add(new DataColumn("PointTcpDataAttach_Std", typeof(float)));
 
                       DFM.OtherInfo.ForEach(x =>
                           {
                               DataRow _dr = _dt.NewRow();
                               _dr["PointTcpDataID"] = _identityID;
                               _dr["PointTcpDataAttach_Gold"] = x.Gold;
                               _dr["PointTcpDataAttach_Max"] = x.Max;
                               _dr["PointTcpDataAttach_Std"] = x.Std;
                               _dt.Rows.Add(_dr);
                           });
                       using (SqlBulkCopy _sqlcopy = new SqlBulkCopy(_strCon, SqlBulkCopyOptions.Default, _sqlTransaction))
                       {
                           _sqlcopy.BatchSize = _dt.Rows.Count;
                           _sqlcopy.DestinationTableName = "PointTcpDataAttach";
                           _sqlcopy.WriteToServer(_dt);
                       }
 
                       _sqlTransaction.Commit();
                   }
                   catch (Exception ex)
                   {
                       _sqlTransaction.Rollback();
                   }
               }
           }
       }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值