我收到错误
将数据类型nvarchar转换为数字时出错 表值参数“@dt”的数据不符合参数的表类型。
我创建了一个SQL Server表类型:
CREATE TYPE NACVCC AS TABLE
(
CurrentNACV decimal(5,3),
Year1NACV decimal(5,3),
Year2NACV decimal(5,3),
Year3NACV decimal(5,3),
Year4NACV decimal(5,3),
Year5NACV decimal(5,3),
NACVText nvarchar(255)
);
GO
存储过程是:
CREATE PROCEDURE dbo.InsertNACVCC
@dt AS dbo.NACVCC READONLY
AS
BEGIN
SET NOCOUNT ON;
TRUNCATE TABLE GPSNACVCC
INSERT dbo.GPSNACVCC(NACVText, CurrentNACV, Year1, Year2, Year3, Year4, Year5)
SELECT
NACVText, CurrentNACV,
Year1NACV, Year2NACV, Year3NACV, Year4NACV ,Year5NACV
FROM @dt;
END
GO
从C#开始,我这样称呼:
public static void InsertUSNACVCC(DataTable tvp)
{
using (SqlConnection con = new SqlConnection(GetConnectionString()))
{
con.Open();
SqlCommand cmd = new SqlCommand("dbo.InsertNACVCC", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@dt", tvp);
tvparam.SqlDbType = SqlDbType.Structured;
cmd.ExecuteNonQuery();
}
}
Cmd.ExecuteNonQuery()
返回提到的错误。我在类型和表格中也匹配了nvarchar(255)
的数据类型。
请帮忙
答案 0 :(得分:5)
对于其他人发现这一点 - 我遇到了完全相同的问题,列名与数据类型相同,但顺序不同 - 修复方法是确保DataTable
中列的顺序匹配表类型中列的顺序。