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

  1.创建表。

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

  2.创建表值参数类型

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

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

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

   

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

  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 = "";
p1.Age =;
pList.Add(p1); person p2 = new person(); //个人实体对象
p2.Name = "b";
p2.Pwd = "";
p2.Age =;
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[]; TVPInsert(dt);

  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;
} }

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

 

将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据的更多相关文章

  1. 批量插入数据, 将DataTable里的数据批量写入数据库的方法

    大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql ...

  2. 【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)

    第一种方法:使用SqlCommand.EcecuteNonQurery()  效率最慢 第二种方法:使用SqlDataAdapter.Update(DataTable)   效率次之 第三种方法:使用 ...

  3. SQL Server将DataTable传入存储过程(Table Value Parameter)

    博主在做毕业设计的时候,需要用到事务处理和多次将数据写入不同的表中,但是 SQL Server 数据库是不支持数组类型变量的,想要实现数组的功能,可以通过 XML 和数据表的方法实现,但是实现方法非常 ...

  4. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑

    在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...

  5. 对象列表转换为DataTable或DataTable转换为对象列表.

    /**********************************************************************************/ // 说明: 数据转换工具. ...

  6. Table转换成实体、Table转换成实体集合(可转换成对象和值类型)

    /// <summary> /// Table转换成实体 /// </summary> /// <typeparam name="T">< ...

  7. 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间

    生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...

  8. C# DataTable和List转换操作类

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...

  9. 关于datatable linq的转换

    关于datatable datarow DataTable paraval = GetParaVal(DateCondition, strUrl, Page, RowPage, iYearMonthN ...

随机推荐

  1. Codeforces Round #204 (Div. 2): B

    很简单的一个题: 只需要将他们排一下序,然后判断一下就可以了! 代码: #include<cstdio> #include<algorithm> #define maxn 10 ...

  2. Response.ContentType 详细列表 <转>

    Response.ContentType 详细列表   不同的ContentType 会影响客户端所看到的效果.默认的ContentType为 text/html 也就是网页格式.代码如: <% ...

  3. linux查看端口号是否被占用

    etstat -anp |grep 端口号 root用户执行 netstat -ntupl n表示不查询dns t表示tcp协议 u表示udp协议 p表示查询占用的程序 l表示查询正在监听的程序 查看 ...

  4. css两句话搞定漂亮表格样式

    CSS代码: table { background-color:#c0de98; width:500px; height:100px; } td { background-color:#ffffff; ...

  5. 使用LoadRunner对Web Services进行调用--Add Service Call

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  6. Linux学习笔记22——线程属性(转)

    本文来自博客园:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764204.html 一.线程属性线程具有属性,用pthread_at ...

  7. 创建一个基本的Windows应用程序

    以下是包含的头文件 #define WIN32_LEAN_AND_MEAN // 指示编译器不要包含我们并不需要的MFC内容 #include <windows.h> // 包含所有的Wi ...

  8. 游戏开发Camera之Cinematic Camera-深度

    人的视觉系统是二维的,它通过生理和心理的暗示来感知图像的深度,在现实世界中视觉系统会自动用深度线索depth cue来确定对象之间的距离游戏画面也是二维的,用x,y轴来定义,画面深度用z轴来定义,可以 ...

  9. godaddy.com 注册域名 买卖域名

    https://www.godaddy.com/domains/searchresults.aspx?ci=83269&checkAvail=1&domainToCheck=ses.x ...

  10. BZOJ1015 [JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3895  Solved: 1750[Submit ...