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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1030848/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-06 06:33:32  来源:igfitidea点击:

How to pass User Defined Table Type as Stored Procedured parameter in C#

c#sql-server-2008

提问by Sonic Lee

In SQL Server 2008, we can define a table type and use it as a stored procedures' parameter.

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

But how can I use it in C# invocation of this stored procedure? In other words, how to create a table or list and pass it into a stored procedure in C# code with this new feature of SQL Server 2008?

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

采纳答案by Jeff Meatball Yang

You need to see this example on CodeProject.

您需要在 CodeProject 上查看此示例

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

where dt is a DataTable, and the @fileDetails parameter is a table type in SQL:

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

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

Edit: This MSDN Developer's Guide articlealso would help.

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

回答by Ronald Wildenberg

The easiest way is by passing a DataTableas the parameter. Check out some examples here.

最简单的方法是传递 aDataTable作为参数。在此处查看一些示例。

回答by Kenny Evitt

From Table-Valued Parameters, linked to in Jeff Meatball Yang's answer:

来自Table-Valued Parameters,链接到Jeff Meatball Yang 的回答中

System.Data.SqlClient supports populating table-valued parameters from DataTable, DbDataReader or System.Collections.Generic.IEnumerable ([T:System.Collections.Generic.IEnumerable`1)] objects. You must specify a type name for the table-valued parameter by using the TypeName property of a SqlParameter. The TypeName must match the name of a compatible type previously created on the server. The following code fragment demonstrates how to configure SqlParameter to insert data.

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

回答by malnosna

In my case, I need to specify the data type explicitly

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

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