zoukankan      html  css  js  c++  java
  • 测试SqlBulkCopy类批量插入数据

    今天读"SQLServer中批量插入数据方式的性能对比"时发现SqlBulkCopy可批量插入数据,而且代码比较简洁,由是我就测试了一下,下面是结果.

    • 如果表的字段长度小于实际字符的长度,记录入库时不是抛出截断异常,而抛出"在从服务器接收结果时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道已结束。)"异常,然后Sql Server停止,数据库无法访问。 这个异常也有点太大了吧!
    • 可定义记录入库批次,当出现异常时,该批次事物回滚,本功能无需定义
    • 如果当一条记录入库失败,其它记录都回滚需要定义参数SqlTransaction
        static void SqlBulkCopyTest(DataTable dt)
        {
            using (SqlConnection conn = new SqlConnection("Server=localhost;DataBase=B2B;Uid=sa;Pwd=ll;"))
            {
                conn.Open();
                SqlTransaction tran = conn.BeginTransaction();
                using (SqlBulkCopy bulkCoye = new SqlBulkCopy(conn
                    , SqlBulkCopyOptions.Default
                    , tran))
                {
                    bulkCoye.DestinationTableName = "song";
                    //设定超时时间
                    bulkCoye.BulkCopyTimeout = 10;
                    //每批插入的行数(如果入库失败,只是本批次事物回滚,如果想全部回滚还需要加参数SqlTransaction)
                    bulkCoye.BatchSize = 2;
                    //在上面定义的批次里,每准备插入1条数据时,呼叫相应的事件(这时只是准备,没有真正入库)
                    bulkCoye.NotifyAfter = 1;
                    bulkCoye.SqlRowsCopied += new SqlRowsCopiedEventHandler(SqlRowsCopied);
                    try
                    {
                        bulkCoye.WriteToServer(dt);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }
        }
    
        static void SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
        {
            Console.WriteLine("入库行数:" + e.RowsCopied);
        }
    
  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/lilin/p/1718922.html
Copyright © 2011-2022 走看看