TransactionScope小例

1

public static class DataTableHelper
    {
        public static List<T> ToModel<T>(this DataTable dt) where T : class ,new()
        {
            if (dt == null || dt.Rows.Count == 0)
                return null;
            Type type = typeof(T);
            var list = new List<T>();
            for (int row = 0; row < dt.Rows.Count; row++)
            {
                Object obj = type.Assembly.CreateInstance(type.FullName);

                System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

                for (int i = 0; i < Props.Length; i++)
                {
                    if (Props[i].CanWrite && dt.Columns.IndexOf(Props[i].Name) > -1)
                    {
                        Props[i].SetValue(obj, dt.Rows[row][Props[i].Name], null);
                    }
                }

                list.Add(obj as T);
            }

            return list;
        }
    }
    public class StudentModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime CreateTime { get; set; }
    }
    //数据库访问对象
    public class Studuent
    {
        public static IList<StudentModel> GetList()
        {
            //不允许脏读
            string sql = "SELECT Id,Name,CreateTime FROM Student ORDER BY Id DESC;";
            DataTable dt = SqlHelper.Instance.ExecuteDataTable(CommandType.Text, sql);
            return dt.ToModel<StudentModel>();
        }

        public static bool Add(string name)
        {
            SqlParameter[] parms = {
                                       new SqlParameter("@Name", SqlDbType.NVarChar, 32) { Value = name },
                                       new SqlParameter("@CreateTime", SqlDbType.DateTime) { Value = DateTime.Now }
                                   };
            string sql = "INSERT INTO Student (Name,CreateTime) VALUES (@Name,@CreateTime)";
            return SqlHelper.Instance.ExecuteNonQuery(CommandType.Text, sql, parms) > 0;
        }

        public static void Clear()
        {
            SqlHelper.Instance.ExecuteNonQuery("DELETE From Student");
        }

        //公共方法,输出学生列表

    }
    public class TransactionScopeTest
    {
        static void PrintStudent()
        {
            IList<StudentModel> list = Studuent.GetList();
            if (list == null)
                return;
            foreach (var item in list)
            {
                Console.WriteLine("{0}\t{1}\t{2}", Thread.CurrentThread.ManagedThreadId, item.Name, item.CreateTime);
            }
            Console.WriteLine();
        }

        public static void Excute()
        {
            Studuent.Clear();
            Task.Run(() =>
            {
                Console.WriteLine("开始添加用户");
                using (TransactionScope scope = new TransactionScope())
                {
                    Studuent.Add("Grace");
                    Studuent.Add("Aven");
                    scope.Complete();
                    //在Compltete已提交数据库
                    Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "Scope已提交");
                    Thread.Sleep(1000 * 10);
                }

                //在作用范围外解除锁表
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "scope已释放");
            });
            //PrintStudent();
        }
    }
时间: 2024-10-10 01:55:25

TransactionScope小例的相关文章

新版API WordCount 小例 及如何导入jar包

WordCount: 简单解析wordcount小例子的代码,对应于新版的API进行处理. import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.examples.WordCount.TokenizerMapper; import org.apache.hadoop.fs.Path; im

使用libcurl下载文件小例

libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP--一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要讲解一个使用curl下载文件的小例. 首先是去下载curl的最新源代码,然后编译成动态库或者静态库:然后把头文件和库文件拿出来加入到我们自己的工程中,引用声明: #include "curl.h" #ifdef _DEBUG #pragma comment(lib, "../De

分享一个Duilib配置的下载器小例

使用DuiLib开发Windows界面实在是太简单了,对于MFC程序员真的是脱离苦海,控件自绘什么的GDI\GDI+真要把人搞死.DuiLib是国内一个非常有名的开源界面库,目前很多软件都是用了它(百度卫士.杀毒.PPS--),感谢开源的前辈们. 扩展列表控件的滚动消息,加上一个定时器,让他可以自动滚动一段再停下来. void CDownloadListUI::DoEvent( TEventUI& event ) { if( !IsMouseEnabled() && event.T

dwr框架异步调用简单小例

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架.可以轻松实现用js直接调用java方法. 通过一个小例子来演示一个dwr的基本使用: ①. 首先肯定要创建一个web project的,然后拷贝dwr.jar到WEB-INF\lib目录下 ②. 修改web.xml文件,添加dwr servlet配置 <servlet> <servlet-name>dwr-invoker</servlet-name>

【windows核心编程】IO完成端口(IOCP)复制文件小例

1.演示内容 文件复制 2.提要 复制大文件时,使用FILE_FLAG_NO_BUFFERING标志 同时需要注意: 读写文件的偏移地址为 磁盘扇区 的整数倍 读写文件的字节数为 磁盘扇区 的整数倍 读文件到的缓冲区在进程地址空间中的地址为 磁盘扇区 的整数倍 3.JUST CODING #include "stdafx.h" #include <Windows.h> #include <process.h> #include <iostream>

【windows核心编程】IO完成端口(IOCP)复制文件小例前简单说明

1.关于IOCP IOCP即IO完成端口,是一种高伸缩高效率的异步IO方式,一个设备或文件与一个IO完成端口相关联,当文件或设备的异步IO操作完成的时候,去IO完成端口的[完成队列]取一项,根据完成键(Complete Key)来判断是哪个设备或文件的操作完成,然后再根据实际情况进行处理. 2.相关API 和 数据结构   将一个已完成的IO通知追加到IOCP的[完成队列]中 BOOL   PostQueuedCompletionStatus( HANDLE    hCompletionPort

HTML5基础小结(二)——标签小例

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhaGFuNjI5NjI5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 随篇博客的思维导图.继续: 二.看下标签的使用,这里看几个小样例(效果图不再给出): 1.结构标签的使用,这里来看一个页面的布局: <!doctype html> <html> &

tomcat_配置jdbc(小例)

原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/47043975 tomcat下配置jdbc举例 使用tomcat手工配置jdbc时,一般会到应用下面的webapps中的"应用名称\WEB-INF\classes"文件夹中找到jdbc.properties文件. 然后根据样例配置jdbc即可,下面举一个例子:某java程序使用三用户方式访问各用户数据的系统,

界面制作小例

import java.awt.*; import java.awt.event.*; import java.applet.*; import javax.swing.*; public class xuexingyuxingge implements ActionListener { JMenuItem jm1,jm2; static JFrame f; public static void main(String[] args) { // TODO Auto-generated metho