不支持 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}

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

不支持 SQL Server 表值参数列.类型为“对象”

作为参数传递的表与预期的表值参数不"列兼容"。

在表值参数中为列("{field}"(传递的类型("对象"(与相应列的类型不兼容。

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

在此处查看更多内容:表值参数

似乎

错误是在使用格式化函数时,例如ToUpper()ToLower() {value}

这些函数期望类型为 string{value}的类型为 Object

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

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