我收到错误



我创建了一个 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 中的列顺序与表中的列顺序匹配类型。

关于c# - 将数据类型 nvarchar 转换为数字时出错。表值参数 "@dt"的数据不符合表类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29058920/

10-12 12:44
查看更多