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