将数据类型nvarchar转换为数值时出错。表值参数“ @dt”的数据与表类型不符

use*_*285 3 c# sql-server ado.net

在此处输入图片说明

我遇到错误

将数据类型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
Run Code Online (Sandbox Code Playgroud)

存储过程为:

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
Run Code Online (Sandbox Code Playgroud)

从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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Cmd.ExecuteNonQuery()返回提到的错误。我已经匹配了类型nvarchar(255)和表中的数据类型。

请帮忙

Wor*_*DBA 5

对于发现此问题的其他人-我也有完全相同的问题,列名与数据类型相同,但是顺序不同-解决办法是确保列DataTable顺序与表类型中的列顺序匹配。