如何从.net代码将表值参数传递到存储过程
我有一个 SQL Server 2005 数据库。在一些过程中,我将表参数作为 nvarchar(用逗号分隔)传递给存储过程,并在内部划分为单个值。我将它添加到 SQL 命令参数列表中,如下所示:
cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";
我必须将数据库迁移到 SQL Server 2008。我知道有表值参数,并且我知道如何在存储过程中使用它们。但我不知道如何将一个传递到 SQL 命令中的参数列表。
有谁知道 Parameters.Add
过程的正确语法?或者还有其他方法来传递这个参数吗?
I have a SQL Server 2005 database. In a few procedures I have table parameters that I pass to a stored proc as an nvarchar
(separated by commas) and internally divide into single values. I add it to the SQL command parameters list like this:
cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";
I have to migrate the database to SQL Server 2008. I know that there are table value parameters, and I know how to use them in stored procedures. But I don't know how to pass one to the parameters list in an SQL command.
Does anyone know correct syntax of the Parameters.Add
procedure? Or is there another way to pass this parameter?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
DataTable
、DbDataReader
或IEnumerable
对象可用于根据 MSDN 文章SQL Server 2008 (ADO.NET) 中的表值参数。以下示例说明了如何使用
DataTable
或IEnumerable
:SQL 代码:
C# 代码:
DataTable
,DbDataReader
, orIEnumerable<SqlDataRecord>
objects can be used to populate a table-valued parameter per the MSDN article Table-Valued Parameters in SQL Server 2008 (ADO.NET).The following example illustrates using either a
DataTable
or anIEnumerable<SqlDataRecord>
:SQL Code:
C# Code:
除了 Ryan 的回答之外,如果您使用 处理
表值参数
,您还需要设置DataColumn
的Ordinal
属性>多个列,其序号不按字母顺序排列。例如,如果您有以下表值用作 SQL 中的参数:
您需要在 C# 中对列进行排序:
如果您未能执行此操作,您将收到解析错误,无法将 nvarchar 转换为国际。
Further to Ryan's answer you will also need to set the
DataColumn
'sOrdinal
property if you are dealing with atable-valued parameter
with multiple columns whose ordinals are not in alphabetical order.As an example, if you have the following table value that is used as a parameter in SQL:
You would need to order your columns as such in C#:
If you fail to do this you will get a parse error, failed to convert nvarchar to int.
通用的
Generic
最干净的使用方式。假设您的表是一个名为“dbo.tvp_Int”的整数列表(为您自己的表类型自定义)
创建此扩展方法...
现在您可以通过执行以下操作在任意一行中添加表值参数:
The cleanest way to work with it. Assuming your table is a list of integers called "dbo.tvp_Int" (Customize for your own table type)
Create this extension method...
Now you can add a table valued parameter in one line anywhere simply by doing this:
使用此代码根据您的类型创建合适的参数:
Use this code to create suitable parameter from your type:
如果您有一个带有参数的表值函数,例如这种类型:
并且您这样调用它:
那么您可以从 C# 中调用它,如下所示:
If you have a table-valued function with parameters, for example of this type:
And you call it this way:
Then you can call it from C# like this: