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

27

在 SQL Server 2008 中,我们可以定义表类型并将其用作存储过程的参数。

但是我该如何在 C# 调用此存储过程时使用它呢?换句话说,如何使用 SQL Server 2008 的这个新特性,在 C# 代码中创建一个表或列表,并将其传递给存储过程?

4个回答

24

你需要查看这个 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)
)

编辑: 这篇MSDN开发者指南文章 也会有所帮助。


1
这个选项相对于在foreach中调用SP并进行多次迭代来说更有效吗? - Alonso Contreras

2
最简单的方法是将 DataTable 作为参数传递。在这里查看一些示例:这里

1
在我的情况下,我需要明确指定数据类型。
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

0

来自表值参数,链接到Jeff Meatball Yang的答案

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接