我的数据库表结构如下:
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 2008
和ADO.NET
谢谢
答案 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/