相关知识:

  1. 处于同一事务(Transaction)内的一组操作,要么都成功执行,最后完全提交;但如果只要有任何一个操作失败或者出问题,所有值钱执行的操作也都取消并恢复到初始状态(即回滚)
  2. SqlTransacttion代表从ADO.NET中发出的事务

代码示例:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient; namespace ConsoleApplication13
{
class Program
{
static string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root";
static SqlConnection conn = new SqlConnection(strConn); static string sql1 = "INSERT INTO Account(AccountID,AccountName,password) VALUES"
+ "(100,'sql1','123456')";//此命令正确
static string sql2 = "INSERT INTO Account(AccountID,AccountName1,password) VALUES"
+ "(100,'sql2','123456')";//此命令因有拼写错误将会失败 static SqlCommand cmd1 = new SqlCommand(sql1, conn);
static SqlCommand cmd2 = new SqlCommand(sql2, conn); static void Main(string[] args)
{
//OperationWithoutTransaction();
OperationWithTransaction();
} static void OperationWithoutTransaction()
{
conn.Open(); try
{
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine("执行失败。");
Console.WriteLine(e);
}
finally
{
conn.Close();
}
} static void OperationWithTransaction()
{
conn.Open();
//连接打开后,才能启动事务
SqlTransaction trans = conn.BeginTransaction();
//将两个操作添加到同一个事务中
cmd1.Transaction = trans;
cmd2.Transaction = trans; try
{
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
//如果没有出现异常,则提交事务
trans.Commit();
}
catch (Exception e)
{
Console.WriteLine("执行失败,事务回滚。");
Console.WriteLine(e);
//执行回滚
trans.Rollback();
}
finally
{
conn.Close();
}
}
}
}

程序分析:

  1. 没有使用事务时,如果命令1执行正确,而命令2执行错误,则命令1的修改将成功保存到数据库中
  2. 使用事务之后,只要有任何一个命令错误,则另个命令都不会对数据库造成影响

最新文章

  1. Linux Kernel 代码艺术——编译时断言
  2. iOS9 HTTP 通信报错解决方案
  3. 设计模式C#实现(十二)——装饰模式
  4. 在server 2008/2003中 取消对网站的安全检查/去除添加信任网站
  5. (转载)Delphi TStringList的用法
  6. python sqlite3使用
  7. ACM2036_改革春风吹满地(多边形面积计算公式)
  8. LeeCode-Merge Sorted Array
  9. openvswitch常用操作
  10. Last Defence (run time error)
  11. 阿根廷探戈舞会- 一起salsa百科 - 一起salsa网 - Powered by HDWiki!
  12. Web API 2
  13. linux脚本Shell之awk详解(二)
  14. Android中使用http协议访问网络
  15. Android 之数据存储(sdCard,sharedPreference,sqlite数据库)
  16. A glimpse of Support Vector Machine
  17. 洛谷P1904
  18. asp.net excel模板下载
  19. AutoMapper在MVC中的运用小结
  20. STRTOK函数和STRTOK_R函数

热门文章

  1. NopCommerce使用Autofac实现依赖注入
  2. Spring3 Security 中配置会话管理
  3. jquery 请求apache solr 跨域解决方案
  4. AsyncTask的介绍
  5. Android&iOS崩溃堆栈上报
  6. android 内存优化以及性能优化相关问题
  7. QTREE3 spoj 2798. Query on a tree again! 树链剖分+线段树
  8. 开启Microsoft SQL Management时,如果出现"未能加载包
  9. 数组去重算法,quickSort
  10. 如何为不定高度(height:auto)的元素添加CSS3 transition-property:height 动画