如何将表值参数从.NET代码传递给存储过程

如何将表值参数从.NET代码传递给存储过程

我有一个MSSQLServer 2005数据库。在一些过程中,我将表参数作为nvarchar(用逗号分隔)传递给存储的proc,并在内部划分为单个值。我将它添加到SQL命令参数列表中,如下所示:

cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";

我必须将数据库迁移到SQLServer 2008。我知道有表值参数,我知道如何在存储过程中使用这些参数。但我不知道如何在SQL命令中将一个参数列表传递给参数列表。是否有人知道Parameters.Add程序?或者还有其他方式传递这个参数?


繁星coding
浏览 731回答 3
3回答

ibeautiful

至于Ryan的答案,您还需要设置DataColumn氏Ordinal属性,如果您处理的是table-valued parameter带着倍数序数为不按字母顺序排列。例如,如果有以下表值,则在SQL中用作参数:CREATE TYPE NodeFilter AS TABLE (   ID int not null   Code nvarchar(10) not null,);您需要在C#中按这样的顺序排列:table.Columns["ID"].SetOrdinal(0);// this also bumps Code to ordinal of 1// if you have more than 2 cols then you would need to set more ordinals如果您不能这样做,您将得到一个解析错误,未能将nvarchar转换为int。

手掌心

属属&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;DataTable&nbsp;ToTableValuedParameter<T,&nbsp;TProperty>(this&nbsp;IEnumerable<T>&nbsp;list,&nbsp;Func<T,&nbsp;TProperty>&nbsp;selector) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tbl&nbsp;=&nbsp;new&nbsp;DataTable(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbl.Columns.Add("Id",&nbsp;typeof(T)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(var&nbsp;item&nbsp;in&nbsp;list) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbl.Rows.Add(selector.Invoke(item)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tbl; &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP