不支持SQL Server表值参数列。类型是'对象'

时间:2014-12-04 05:20:52

标签: c# sql sql-server stored-procedures table-valued-parameters

我不得不问这个因为它困扰我,我找不到这个问题的具体来源。我知道如何在Sql Server中使用TVP(表值参数),我将它用于我的存储过程中的批量插入。所以基本上我在Sql中创建了表格类型,其中相应的列/字段用于我要插入记录的表格,从代码(C#)到sql存储过程,它对我来说很好用,现在这里是我的问题:最近用户尝试插入多个记录,表参数中有一些随机字段在尝试执行存储过程时会产生这种错误消息(主要是在C#中,因为它会引发一些错误)。

  

不支持“{field}”列的类型。类型是'对象'

每次出现错误消息中的字段都会发生变化,所以我知道问题出在数据中,但我不知道它是什么。顺便说一句,这是我将数据从我的源传输到数据表的方式,该数据表将用作插入的参数:

dr["{field_name}"] = {value}

更新:我想详细说明如何将值传递给数据表。基本上我会尝试通过

遍历数据表中的所有行
table.Rows.Cast<DataRow>().ToList().ForEach( action => {statements})

然后在foreach内部,我分配

action["{field_name}"] = action["{field_name}"].{formatting_function}

我需要在将数据插入数据库之前格式化数据,例如。转移到大写或小写或转换为特定类型,例如。布尔值。

2 个答案:

答案 0 :(得分:1)

ToUpper()上使用ToLower(){value}等格式化功能时,似乎出现了错误。

这些函数要求类型为string,但{value}的类型为Object

因此请使用ToString(),如下所示:

{value}.ToString().ToLower().

答案 1 :(得分:1)

您作为参数传递的表与预期的表值参数不是“列兼容的”。

您在表值参数中为列('{field}')传递的类型('Object')与相应列的类型不兼容。

构造表值时,请确保所有列类型都与预期参数兼容。

在此处查看更多信息: Table-Valued Parameters