如何通过单个调用在表中插入多个记录

时间:2014-05-21 05:04:23

标签: sql-server sql-server-2008 ado.net user-defined-types

我的数据库表结构如下:

tableName:StructureTable

Field 1: FiledName
Field 2: FieldValue
Field 3: Comments

存储过程如下:

       3 input param:@FiledName,@FieldValue,@Comments

       BEGIN
              INSERT INTO StructureTable (FiledName,FieldValue,Comments) Values(@FiledName,@FieldValue,@Comments)


       END

现在,从前端开始,我将插入7个字段,如下所示:

FieldName | FieldValue |    Comment 
---------------------------------------
  Name        John        name insert
Profession   Analyst       Profession

...

我创建了一个具有insert/update脚本的程序。

问题:我不想做7次调用,将7个字段插入数据库。

我想进行sigle调用并按上述方式输入7个字段。

请建议任何方法或分享任何代码来实现此目的。

我正在使用SQL Server 2008ADO.NET

谢谢

1 个答案:

答案 0 :(得分:2)

由于您同时使用Sql Server 2008和ADO.Net,因此完成传递多组参数任务的推荐方法是使用Table Valued Parameter。该文档链接还概述了开发人员过去使用过的其他方法,例如逗号分隔字符串,xml文档或批量复制。 DataTables也是可能的,但如果您还没有使用它们则不是必需的。 TVP是微软为这种情况提供的技术。

一旦获得在数据库中创建的User-Defined-Table-Type,并获得ADO.Net代码设置以填充该TVP的实例,您将需要知道如何填充它,这并不总是显而易见的。您可以使用DataTable,这是BAdmin提供的链接示例。不幸的是,他并没有很好地解释你没有向商店程序发送DataTable,而是从DataTable中填充TVP。您也可以使用DataReader(如果您正在读取其他结果集中的参数值,而不是其他结果集)或IEnumerable<SqlDataRecord>,一旦您掌握它就很容易创建(参见SqlDataRecord )。这是一个关于设置类的优秀教程,该类从对象列表中提供SqlDataRecord的枚举器:http://lennilobel.wordpress.com/2009/07/29/sql-server-2008-table-valued-parameters-and-c-custom-iterators-a-match-made-in-heaven/