Raj*_*aja 4 vb.net ado.net sql-server-2008
我正在使用 TVP,并且试图将数据表作为 TVP 传递给存储过程。当命令尝试 ExecuteNonQuery 时,它会引发错误:
操作数类型冲突:datetime2 与 int 不兼容。表值参数“@tvpPermitWork”的数据不符合参数的表类型。
我使用可视化工具检查了数据表,发现所有数据都是正确的。我现在卡住了,我没有时间将其更改为带有单个参数的存储过程。
非常感谢有关如何解决此问题的任何建议。
我已经找到了相同问题的解决方案。
您需要在 TVP 和 c# 代码中检查匹配列的顺序。
例如,您有这样的 tvp:
CREATE TYPE [dbo].[tvp_FinDocContract] AS TABLE(
[column_1_Id] [uniqueidentifier] NOT NULL,
[column_2_Id] [uniqueidentifier] NULL,
[column_3_Id] [datetime] NULL
)
Run Code Online (Sandbox Code Playgroud)
那么你创建tvp的c#代码一定是这样的:
DataTable tvp = new DataTable();
//the order is very important
tvp.Columns.Add(new DataColumn("column_1_Id", typeof (Guid)){AllowDBNull = false};
tvp.Columns.Add("column_2_Id", typeof (Guid));
tvp.Columns.Add("column_3_Id", typeof (DateTime));
foreach (var item in ...)
{
//just populating
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4381 次 |
| 最近记录: |