【问题标题】:SQL Server Table Valued Parameter column is not supported. The type is 'Object'不支持 SQL Server 表值参数列。类型是“对象”
【发布时间】:2014-12-04 05:20:52
【问题描述】:

我不得不问这个问题,因为它困扰着我,我找不到这个问题的具体根源。我知道如何在 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}

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

【问题讨论】:

  • 这听起来像是您的 {value} 和 {field_name} 的类型之间的转换问题。
  • 那些特定的随机字段是什么类型的?在我看来,这也像是一个选角问题。在将值传递给 DataRow 项之前,您是否尝试过将它们转换为对象类型?

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    {value} 上使用ToUpper()ToLower() 等格式化函数时似乎出错了。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2010-12-05
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多