如何在C#中将用户定义的表类型作为存储过程参数传递

时间:2009-06-23 06:07:55

标签: c# sql-server-2008

在SQL Server 2008中,我们可以定义表类型并将其用作存储过程的参数。 但是如何在这个SP的C#调用中使用它呢?换句话说,如何使用SQL Server 2008的这一新功能创建表或列表并将其传递到C#代码中的存储过程中?

4 个答案:

答案 0 :(得分:20)

您需要看到此example on CodeProject

SqlParameter param = cmd.Parameters.AddWithValue("@FileDetails", dt); 

其中dt是DataTable, @fileDetails参数是SQL中的表类型:

create type FileDetailsType as table
(
    FileName        varchar(50),
    CreatedDate        varchar(50),
    Size       decimal(18,0)
)

修改This MSDN Developer's Guide article也会有所帮助。

答案 1 :(得分:2)

最简单的方法是传递DataTable作为参数。查看一些示例here

答案 2 :(得分:0)

来自Table-Valued Parameters,链接到Jeff Meatball Yang's answer

  

System.Data.SqlClient支持从DataTable,DbDataReader或System.Collections.Generic.IEnumerable([T:System.Collections.Generic.IEnumerable`1)]对象填充表值参数。您必须使用SqlParameter的TypeName属性为表值参数指定类型名称。 TypeName必须与先前在服务器上创建的兼容类型的名称匹配。以下代码片段演示了如何配置SqlParameter以插入数据。

答案 3 :(得分:0)

就我而言,我需要明确指定数据类型

SqlParameter param = sqlCommand.Parameters.AddWithValue("@something", dtSomething); // dtSomething is a DataTable
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.type_something"; // The name of the User-Defined Table Type