我有一个存储过程,它接受一个名为SeasonTable的用户定义表类型,如下所示:
季节性

    [SeasonId] [int] NOT NULL,
    [SeasonName] [varchar](50) NOT NULL,
    [Month] [int] NULL,
    [IsDeleted] [bit] NOT NULL

存储过程如下所示
CREATE PROCEDURE [dbo].[udpTest]
(
    @STable dbo.SeasonTable READONLY
)
AS
BEGIN
SELECT [SeasonName] as SeasonName,[SeasonId],[Month],[IsDeleted]
    FROM @AdminBillingSeasonsTable
END

当我从C应用程序调用此函数时
private DataTable TestCreateDataTable()
{
            DataTable dt = new DataTable();

            dt.Columns.Add("SeasonName", typeof(string));
            dt.Columns.Add("SeasonId", typeof(int));
            dt.Columns.Add("Month", typeof(int));
            dt.Columns.Add("IsDeleted", typeof(bool));
            dt.Rows.Add("season1",1, 4,  false);
            dt.Rows.Add("season2",2, 9, false);
            dt.Rows.Add("season3",3, 11,  false);
            return dt;
}

当我使用上表作为c app中sp的参数时,它抛出错误:
无法将“季节1”转换为int。
这是否意味着C app中的列顺序应该与SQL中的列顺序相同?
我们非常感谢您的帮助。
提前谢谢

最佳答案

尝试像这样切换列序列

 private DataTable TestCreateDataTable()
            {
                DataTable dt = new DataTable();

                dt.Columns.Add("SeasonId", typeof(int));     // seasonId and then
                dt.Columns.Add("SeasonName", typeof(string)); // seasonName
                dt.Columns.Add("Month", typeof(int));
                dt.Columns.Add("IsDeleted", typeof(bool));
                dt.Rows.Add("season1",1, 4,  false);
                dt.Rows.Add("season2",2, 9, false);
                dt.Rows.Add("season3",3, 11,  false);
                return dt;
            }

07-28 08:07