Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c:将dataTable传递给存储过程:列顺序问题_C#_.net_Sql_Sql Server 2008 - Fatal编程技术网

C# c:将dataTable传递给存储过程:列顺序问题

C# c:将dataTable传递给存储过程:列顺序问题,c#,.net,sql,sql-server-2008,C#,.net,Sql,Sql Server 2008,我有一个存储过程,它接受一个用户定义的表类型,名为seasureTable,如下所示: 季节性 存储过程如下所示 CREATE PROCEDURE [dbo].[udpTest] ( @STable dbo.SeasonTable READONLY ) AS BEGIN SELECT [SeasonName] as SeasonName,[SeasonId],[Month],[IsDeleted] FROM @AdminBillingSeasonsTable END

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

季节性

存储过程如下所示

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转换为整数

这是否意味着C应用程序中的列顺序应该与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;
            }

您是否尝试过在dt中切换您的列SequenceSequenceSequenceId然后是SequenceName???@yogi ya,切换后效果很好@yogi可能需要补充这一点作为答案:这样人们就知道答案是正确的。实际上,用户定义的表类型除了在SQL中创建的列以外,其他列的格式都是在SQL中创建的,我们不能处理它们,至少我不知道怎么做,因此,最好保持顺序正确并同步。我正在为此自动生成数据表,并且我可以确认,如本文所述,SQL Server会忽略表列名和类型,并且在存储过程获取表参数时仅依赖它们的顺序。因此,您必须在某个地方对这些列进行排序。@philw在这里有相同的经验,只是它不忽略类型。如果存在转换,它将尝试转换类型。名称被忽略是的。我们有自动生成数据表的解决方案吗?索引肯定不匹配,那么最好的方法是什么呢?我们可以试试下面的代码来创建动态表DataTable=newdatatable;//声明所需表类型的变量,以使用其架构生成结果集。SqlDataAdapter adapter=new SqlDataAdapterDECLARE@tableType dbo.UserDefinitTableType选择*FROM@tableType,ConnectionString;//将DataTable架构设置为与dbo.UserDefinitTableType匹配。adapter.FillSchematable,SchematType.Source;
 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;
            }