首页 > 代码库 > 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
将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 )
2.创建表值参数类型
我们打开查询分析器,然后在查询分析器中执行下列代码:
create type pson as table ( [Name] [nvarchar](50) NULL, [Pwd] [nvarchar](50) 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 = "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);
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; } }
这样可实现在存储过程中批量插入数据。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。