C#数据库事务原理及实践(下)

来源:网络整理 责任编辑:栏目编辑 发表时间:2013-07-01 18:23 点击:

另一个走向极端的错误

满怀信心的新手们可能为自己所掌握的部分知识陶醉不已,刚接触数据库库事务处理的准开发者们也一样,踌躇满志地准备将事务机制应用到他的数据处理程序的每一个模块每一条语句中去。的确,事务机制看起来是如此的诱人——简洁、美妙而又实用,我当然想用它来避免一切可能出现的错误——我甚至想用事务把我的数据操作从头到尾包裹起来。

看着吧,下面我要从创建一个数据库开始:

using System;
using System.Data;
using System.Data.SqlClient;

namespace Aspcn
{
  public class DbTran
  {
   file://执行事务处理
   public void DoTran()
   {
    file://建立连接并打开
    SqlConnection myConn=GetConn();
    myConn.Open();

    SqlCommand myComm=new SqlCommand();
    SqlTransaction myTran;

    myTran=myConn.BeginTransaction();

    file://下面绑定连接和事务对象
    myComm.Connection=myConn;
    myComm.Transaction=myTran;

    file://试图创建数据库TestDB
    myComm.CommandText="CREATE database TestDB";
    myComm.ExecuteNonQuery();

    file://提交事务
    myTran.Commit();
   }

   file://获取数据连接
   private SqlConnection GetConn()
   {
    string strSql="Data Source=localhost;Integrated Security=SSPI;user id=sa;password=";
    SqlConnection myConn=new SqlConnection(strSql);
    return myConn;
   }
  }

  public class Test
  {
   public static void Main()
   {
    DbTran tranTest=new DbTran();
    tranTest.DoTran();
    Console.WriteLine("事务处理已经成功完成。");
    Console.ReadLine();
   }
  }
}

//---------------

  未处理的异常: System.Data.SqlClient.SqlException: 在多语句事务内不允许使用 CREATE DATABASE 语句。

at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Aspcn.DbTran.DoTran()
at Aspcn.Test.Main()

注意,如下的SQL语句不允许出现在事务中:

ALTER DATABASE 修改数据库
BACKUP LOG 备份日志
CREATE DATABASE 创建数据库
DISK INIT 创建数据库或事务日志设备
DROP DATABASE 删除数据库
DUMP TRANSACTION 转储事务日志
LOAD DATABASE 装载数据库备份复本
LOAD TRANSACTION 装载事务日志备份复本
RECONFIGURE 更新使用 sp_configure 系统存储过程更改的配置选项的当前配置(sp_configure 结果集中的 config_value 列)值。
RESTORE DATABASE 还原使用BACKUP命令所作的数据库备份
RESTORE LOG 还原使用BACKUP命令所作的日志备份
UPDATE STATISTICS 在指定的表或索引视图中,对一个或多个统计组(集合)有关键值分发的信息进行更新

除了这些语句以外,你可以在你的数据库事务中使用任何合法的SQL语句。
事务回滚

事务的四个特性之一是原子性,其含义是指

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 用C#制作屏幕捕获程序
    • .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上
    • 遍历ArrayList易犯错误
    • C#对XML操作:一个处理XML文件的类(1)
    • .NET简谈反射(动态调用)
    • 使用C#编写LED样式时钟控件
    • DataList嵌套问题 如何删除内层子DataList的记录
    • 怎样用C#实现完整文档打印功能
    • .NET简谈自定义事务资源管理器
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1