zoukankan      html  css  js  c++  java
  • 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其他的方法,不过这个方法已经实现,就写一下了:

      1.创建表。

    CREATE TABLE [dbo].[person](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [Name] [nvarchar](50) NULL,
        [Pwd] [nvarchar](50) NULL,
        [Age] [int] NULL
    )
    View Code

      2.创建表值参数类型

      我们打开查询分析器,然后在查询分析器中执行下列代码:

    create type pson as table
    (
        [Name] [nvarchar](50) NULL,
        [Pwd] [nvarchar](50) NULL,
        [Age] [int] NULL
    )
    go
    View Code

      执行成功以后,我们打开企业管理器,按顺序依次展开下列节点--数据库、展开可编程性、类型、用户自定义表类型,就可以看到我们创建好的表值类型了如下图所示:

       

    说明我们创建表值类型成功了。

      3.编写存储过程

    存储过程的代码为:

      create proc sp_InsertSingleUser
    (
        @User pson readonly
    )
    as
    BEGIN

    SET NOCOUNT ON;

    Insert into person(Name,Pwd,Age) select Name,Pwd,Age from @User

    END

    4.编写代码调用存储过程。

      添加数据按钮的功能

     List<person> pList = new List<person>();             //声明集合
    person p1 = new person();        //个人实体对象
            p1.Name = "a";
            p1.Pwd = "12";
            p1.Age =11;
            pList.Add(p1);
    
     person p2 = new person();        //个人实体对象
            p2.Name = "b";
            p2.Pwd = "21";
            p2.Age =12;
            pList.Add(p2);
    
      XmlSerializer s = new XmlSerializer(typeof(List<person>));
            StringWriter sw = new StringWriter();
            s.Serialize(sw,pList);
            DataSet ds = new DataSet();
            ds.ReadXml(new StringReader(sw.ToString()));
            DataTable dt = ds.Tables[0];
    
            TVPInsert(dt);
    View Code

      Dal层的编码

      private static void TVPInsert(DataTable dt)
        {
            
    
            DataTable dataTable = dt;
            try
            {
                SqlParameter[] sqlParameter = { new SqlParameter("@User", dataTable) };
                SqlHelper.ExecuteNonQuery(strCon, CommandType.StoredProcedure, "sp_InsertSingleUser", sqlParameter);
            }
            catch (Exception)
            {
                
                throw;
            }
           
        }
    View Code

    这样可实现在存储过程中批量插入数据。

     
  • 相关阅读:
    「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!
    结合源码,重温 Android View 的事件处理知多少 ?
    Android 这 13 道 ContentProvider 面试题,你都会了吗?
    17 个必须掌握的 BroadcastReceiver 知识点「建议收藏」
    23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」
    Activity 的 36 大难点,你会几个?「建议收藏」
    Python time模块
    vue项目的创建
    githunb和码云生成/添加SSH公钥
    weex打包apk步骤
  • 原文地址:https://www.cnblogs.com/zhoulove/p/3700823.html
Copyright © 2011-2022 走看看