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

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

     
  • 相关阅读:
    springcloud组件梳理之hystrix
    springcloud组件梳理之Feign
    React Native startReactApplication 方法简析
    FREE OFFER
    修改docker默认目录
    使用云效进行自动化构建和部署
    Git同时推送到多个远端仓库【转】
    OneNote出现we're sorry. OneNote is cleanning up from the last time it was open.
    【数学基础】数据科学的概率基础
    【摄影后期基础教程】Lightroom_秋凉视频教程
  • 原文地址:https://www.cnblogs.com/zhoulove/p/3700823.html
Copyright © 2011-2022 走看看