C# 将数据类型nvarchar转换为数字时出错。表值参数“的数据”@dt";不';不符合表格类型

C# 将数据类型nvarchar转换为数字时出错。表值参数“的数据”@dt";不';不符合表格类型,c#,sql-server,ado.net,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), Y

我犯了一个错误

将数据类型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)


请帮助其他发现此问题的人-我有完全相同的问题,列名与数据类型相同,但顺序不同-修复方法是确保
DataTable
中的列顺序与表类型中的列顺序匹配。

您尝试过调试吗?似乎tvp变量中有一些不兼容的数据(或表结构)。@Zohar:上面添加了tvp数据。请看一看。我已经有一段时间没有做过这种事情了,但我认为c#dataTable中的列名应该与sql类型中的列名相同。如果名称不相同,则至少顺序相同。如前所述,sql引擎似乎从它获取的数据中选择了错误的列。我们可以查看您的DataTable配置吗?这也是我的问题。谢谢@Bownstone先生,在我遇到你的答案之前,我失去了三天的时间。