我有一个SQL Server 2005数据库。在一些过程中,我将表参数作为nvarchar
(用逗号分隔)传递给存储过程,并在内部划分为单个值。我将其添加到SQL命令参数列表中,如下所示:
cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";
我必须将数据库迁移到SQL Server 2008。我知道有表值参数,也知道如何在存储过程中使用它们。但我不知道如何在SQL命令中将表值参数传递给参数列表。
有人知道Parameters.Add
过程的正确语法吗?或者有其他方法传递此参数吗?
6条答案
按热度按时间vmpqdwk31#
DataTable
、DbDataReader
或IEnumerable<SqlDataRecord>
对象可用来填入MSDN文章Table-Valued Parameters in SQL Server 2008 (ADO.NET)中所述的数据表值参数。下列范例说明如何使用
DataTable
或IEnumerable<SqlDataRecord>
:SQL代码:
C#程式码:
2cmtqfgy2#
根据Ryan的回答,如果您要处理的
table-valued parameter
包含多个列,并且这些列的序数不是按字母顺序排列,则还需要设置DataColumn
的Ordinal
属性。例如,如果您有以下表值,该值用作SQL中的参数:
在C#中,您需要按如下方式对列进行排序:
如果未能执行此操作,则会出现解析错误,即无法将nvarchar转换为int。
fcg9iug33#
通用
kkih6yb84#
使用它的最简洁的方式。假设您的表是一个名为“dbo.tvp_Int”的整数列表(为您自己的表类型定制)
创建此扩展方法...
现在,只需执行以下操作,即可在任意位置的一行中添加表值参数:
7hiiyaii5#
使用以下代码从您的类型创建合适的参数:
f45qwnt86#
如果您有一个带参数的表值函数,例如以下类型:
你是这么说的:
然后,您可以从C#呼叫它,如下所示: