我在SQL Server 2012的一个表值参数定义为:在表值参数传递类型“对象”的参数为SQL_VARIANT柱
CREATE TYPE [dbo].[TVP] AS TABLE (
[Id] [int] NOT NULL,
[FieldName] [nvarchar](100) NOT NULL,
[Value] [sql_variant] NOT NULL
)
我把它在C#与代码看起来大致等以下内容:
var mdItems = new DataTable();
mdItems.Columns.Add("Id", typeof(int));
mdItems.Columns.Add("FieldName", typeof(string));
mdItems.Columns.Add("Value", typeof(object));
mdItems.Rows.Add(new object[] {2, "blah", "value"}); //'value' is usually a string
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandText = "[WriteFieldValues]";
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddWithValue("@FieldValues", mdItems);
sqlCommand.ExecuteNonQuery();
然后我得到从SQL Server以下错误的ExecuteNonQuery
电话:
不支持列'值'的类型。该类型是“对象”
我发现someone谁3年前遇到了同样的问题,当它被确定为一个已知的Microsoft错误。虽然,该错误的链接被打破。有谁知道是否有关于错误状态或潜在解决方法的最新信息?就目前来看,这个bug确实会杀死sql_variant
字段的值。
@JonSeigel我已经添加了C#调用代码。 – Dan
你选择'sql_variant'的原因是什么?只是好奇。 – codingbiz
@codingbiz该字段需要存储字符串,日期和数字值。我可以在代码中进行手动转换,但这就是sql_variant应该为我做的。 – Dan