在C#asp.net中将列表对象作为表值参数传递时出现异常

时间:2013-12-10 05:07:46

标签: c# asp.net sql-server-2008

我有一个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中创建的自定义类型相同。

我在这里缺少什么以及我需要包含哪些更改才能使其成功运行

2 个答案:

答案 0 :(得分:1)

有三件事可以作为表值参数传递:

  • IEnumerable<SqlDataRecord>
  • DataTable
  • DbDataReader

您的列表,除非它包含SqlDataRecord,否则无法使用

Table-Valued Parameters

  

System.Data.SqlClient支持从DataTable,DbDataReader或System.Collections.Generic.IEnumerable([T:System.Collections.Generic.IEnumerable`1)]对象填充表值参数。

答案 1 :(得分:0)

仅支持Table-Valued Parameters documentation DataTable,支持DbDataReaderIEnumerable<SqlDataRecord>

  

System.Data.SqlClient支持从DataTable,DbDataReader或System.Collections.Generic.IEnumerable

填充表值参数。