码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-01 15:00:10      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   tar   color   int   string   art   2014   404   

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

  1.创建表。

mamicode.com,码迷
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.创建表值参数类型

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

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

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

  mamicode.com,码迷 

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

  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.编写代码调用存储过程。

  添加数据按钮的功能

mamicode.com,码迷
 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层的编码

mamicode.com,码迷
  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

mamicode.com,码迷

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

 

 

 

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

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

标签:style   blog   class   code   tar   color   int   string   art   2014   404   

原文地址:http://www.cnblogs.com/zhoulove/p/3700823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!