将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

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

  将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据 

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

  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

将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

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

 

 

 

你可能感兴趣的:(Datatable)