在 SQL Server 2008 中,我们可以定义表类型并将其用作存储过程的参数。
但是我该如何在 C# 调用此存储过程时使用它呢?换句话说,如何使用 SQL Server 2008 的这个新特性,在 C# 代码中创建一个表或列表,并将其传递给存储过程?
在 SQL Server 2008 中,我们可以定义表类型并将其用作存储过程的参数。
但是我该如何在 C# 调用此存储过程时使用它呢?换句话说,如何使用 SQL Server 2008 的这个新特性,在 C# 代码中创建一个表或列表,并将其传递给存储过程?
你需要查看这个 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开发者指南文章 也会有所帮助。
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
来自表值参数,链接到Jeff Meatball Yang的答案:
System.Data.SqlClient支持从DataTable、DbDataReader或System.Collections.Generic.IEnumerable ([T:System.Collections.Generic.IEnumerable`1)]对象填充表值参数。您必须使用SqlParameter的TypeName属性指定表值参数的类型名称。TypeName必须与先前在服务器上创建的兼容类型的名称匹配。以下代码片段演示了如何配置SqlParameter以插入数据。