【发布时间】:2012-12-18 08:52:23
【问题描述】:
我在 SQL Server 2012 中有一个表值参数定义为:
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();
然后我在ExecuteNonQuery 调用中从 SQL Server 收到以下错误:
不支持“值”列的类型。类型为“对象”
我发现someone 3 年前遇到了同样的问题,当时它被确定为已知的 Microsoft 错误。但是,该错误的链接已损坏。有谁知道是否有关于错误状态的更新信息或潜在的解决方法?就目前而言,这个 bug 真的杀死了 sql_variant 字段的值。
【问题讨论】:
-
@JonSeigel 我已经添加了 C# 调用代码。
-
您选择
sql_variant的原因是什么?只是好奇。 -
@codingbiz 该字段需要存储字符串、日期和数值。我可以在代码中进行手动转换,但这就是 sql_variant 应该为我做的。
-
@Dan 你最后是怎么处理这个问题的?
-
目前提到的MS Connect link似乎还可以;该错误未修复。
标签: c# sql-server sql-server-2012 table-valued-parameters sql-variant