不支持 SQL Server 表值参数列.类型为“对象”
本文关键字:对象 类型 数列 SQL Server 值参 不支持 | 更新日期: 2023-09-27 18:32:59
我必须问这个问题,因为它困扰着我,我找不到这个问题的具体来源。我知道如何在 Sql Server 中使用 TVP(表值参数(,并且我正在使用它在我的存储过程中进行批量插入。所以基本上我在 Sql 中使用我要插入记录的表的相应列/字段创建表类型,它对我来说从代码 (C#( 到 sql 存储过程都很好,现在这是我的问题:最近当用户尝试插入多条记录时,table 参数中的某些随机字段在尝试执行存储过程时会给出这种错误消息(基本上在 C# 中(因为它抛出了一些错误(。
不支持列"{字段}"的类型。类型为"对象">
每次出现时,错误消息中的字段都会更改,因此我知道问题出在数据中,但我不知道它是什么。顺便说一句,这就是我将数据从源传输到将用作插入参数的数据表的方式:
dr["{field_name}"] = {value}
更新:我想详细说明如何将值传输到数据表。基本上,我将尝试通过以下方式遍历数据表中的所有行
table.Rows.Cast<DataRow>().ToList().ForEach( action => {statements})
然后在foreach内部,我分配
action["{field_name}"] = action["{field_name}"].{formatting_function}
我需要在将数据插入数据库之前对其进行格式化,例如。 转换为大写或小写或转换为特定类型,例如。 到布尔值。
作为参数传递的表与预期的表值参数不"列兼容"。
在表值参数中为列("{field}"(传递的类型("对象"(与相应列的类型不兼容。
构造表值时,请确保所有列类型都与预期参数兼容。
在此处查看更多内容:表值参数
似乎
错误是在使用格式化函数时,例如ToUpper()
,ToLower()
{value}
。
这些函数期望类型为 string
但{value}
的类型为 Object
。
因此,请使用如下所示ToString()
:
{value}.ToString().ToLower().