我有一个List<>
对象,我必须将其作为表值参数传递给SQL Server 2008中的存储过程。这是代码:
List<someType> listObjects = new List<someType>();
//Fill listObjects
...
...
...
sqlcmd.Parameters.AddWithValue("@myTableValuedParameter",listObjects).SqlDbType = SqlDbType.Structured;
sqlcmd.ExecuteNonQuery();
代码抛出了一个例外:
对象必须实现IConvertible。
过去,我已成功传递DataTable
作为表值参数。
object
someType
的类型结构与我在Sql Server中创建的自定义类型相同。
我在这里缺少什么以及我需要包含哪些更改才能使其成功运行
答案 0 :(得分:1)
有三件事可以作为表值参数传递:
IEnumerable<SqlDataRecord>
DataTable
DbDataReader
您的列表,除非它包含SqlDataRecord
,否则无法使用
System.Data.SqlClient支持从DataTable,DbDataReader或System.Collections.Generic.IEnumerable([T:System.Collections.Generic.IEnumerable`1)]对象填充表值参数。
答案 1 :(得分:0)
仅支持Table-Valued Parameters documentation DataTable
,支持DbDataReader
或IEnumerable<SqlDataRecord>
:
System.Data.SqlClient支持从DataTable,DbDataReader或System.Collections.Generic.IEnumerable
填充表值参数。