3

我要问这个,因为它令我烦恼,我无法找到这个问题的具体来源。我知道如何在Sql Server中使用TVP(表值参数),我在存储过程中使用它进行批量插入。所以基本上我在SQL创建表类型的表的相应列/字段我要插入记录和它工作正常,我从代码(C#),以SQL存储过程,现在这里是我的问题:最近,当用户尝试插入多条记录,也有在表中的参数某些随机域当它试图执行存储过程(基本上在C#中,因为它会抛出一些错误),让这种错误的消息。SQL Server Table Valued Parameter列不受支持。该类型是“对象”

列的类型 '{字段}' 不被支持。 'Object'的类型是

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

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

更新:我想更详细地说明我如何转院值的数据表。基本上,我将通过

table.Rows.Cast<DataRow>().ToList().ForEach(action => {statements}) 

通过在数据表中的所有行尝试环路,则在foreach里面,我给你

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

我需要这个格式化的数据被插入到前数据库,例如。转换为大写或小写或转换为特定类型,例如。布尔值。

+0

这听起来像您的{}值之间的铸造问题和{} FIELD_NAME的类型。 – 2015-07-23 13:22:12

+0

那些特定的随机场是什么类型?这听起来对我来说也是一个铸造问题。在将它们传递给DataRow项目之前,您是否尝试将值转换为对象类型? – Engin 2015-07-29 18:15:10

回答

1

你逝去的参数表不是“列兼容”与期望的表值参数。

您的表值参数的类型(“对象”)要传递的列(“{}场”)是不是与相应列的类型兼容。

当你构建你的表值,确保所有列类型与预期参数兼容。

更多,请参阅: Table-Valued Parameters

1

使用ToUpper(),ToLower()等格式函数在{value}上看起来错误。

这些函数预计类型为string,但{value}的类型为Object

因此使用ToString()象下面这样:

{value}.ToString().ToLower(). 
相关问题