C# DataTable未在sql server中完全填充数据类型

C# DataTable未在sql server中完全填充数据类型,c#,datatable,sql-server-2012,sql-types,C#,Datatable,Sql Server 2012,Sql Types,我有一个非常奇怪的问题,我在我创建的存储过程中得到了空值 我创建了一个类似这样的类型: CREATE TYPE [EAC].[PersonTableType] AS TABLE( [Title] [nvarchar](5) NULL, [FirstName] [nvarchar](20) NULL, [MiddleName] [nvarchar](20) NULL, [LastName] [nvarchar](25) NULL, [DisplayName]

我有一个非常奇怪的问题,我在我创建的存储过程中得到了空值

我创建了一个类似这样的类型:

CREATE TYPE [EAC].[PersonTableType] AS TABLE(
    [Title] [nvarchar](5) NULL,
    [FirstName] [nvarchar](20) NULL,
    [MiddleName] [nvarchar](20) NULL,
    [LastName] [nvarchar](25) NULL,
    [DisplayName] [nvarchar](50) NULL,
    [Suffix] [nvarchar](5) NULL,
    [WorkPhone] [nvarchar](25) NULL,
    [Extension] [nvarchar](8) NULL,
    [HomePhone] [nvarchar](25) NULL,
    [CellPhone] [nvarchar](25) NULL,
    [Pager] [nvarchar](25) NULL,
    [Fax] [nvarchar](25) NULL,
    [EMail] [nvarchar](75) NULL,
    [SecondaryEMail] [nvarchar](75) NULL,
    [Notes] [nvarchar](2000) NULL,
    [Department] [nvarchar](50) NULL,
    [Position] [nvarchar](120) NULL,
    [Building] [nvarchar](50) NULL,
    [Office] [nvarchar](50) NULL,
    [LicensePlateNumber] [nvarchar](20) NULL,
    [EmployeeId] [nvarchar](20) NULL,
    [Company] [nvarchar](50) NULL,
    [ExternalId] [nvarchar](400) NULL,
    [ZoneID] [int] NULL,
    [LastModifiedUTCOffset] [smallint] NULL
)
我想说的是,如果我创建一个类型并通过SSMS将其传入,则存储过程可以工作。所以我不认为这是
PROC

我还注意到,除了LastName之外,所有字段都已填充

foreach(人的var合同)
{
var row=dataTable.NewRow();
行[“标题”]=合同标题;
行[“FirstName”]=contract.FirstName;
行[“MiddleName”]=contract.MiddleInitial;
行[“LastName”]=contract.LastName;
行[“DisplayName”]=contract.DisplayName;
行[“后缀”]=合同后缀;
行[“工作电话”]=contract.WorkPhone;
行[“扩展”]=合同扩展;
行[“HomePhone”]=contract.HomePhone;
行[“手机”]=contract.mobile;
行[“寻呼机”]=合同。寻呼机;
行[“传真”]=合同传真;
行[“电子邮件”]=contract.EmailAddress;
行[“SecondaryEMail”]=contract.SecondaryEmailAddress;
行[“注释”]=合同注释;
行[“部门”]=合同部门;
行[“职位”]=合同职位;
第[“建筑”]=合同建筑;
行[“办公室”]=合同办公室;
行[“LicensePlateNumber”]=合同。LicensePlateNumber;
行[“EmployeeId”]=contract.EmployeeId;
行[“公司”]=合同公司;
行[“ExternalId”]=contract.ExternalId;
行[“ZoneID”]=contract.ZoneID;
行[“LastModifiedUTCOffset”]=contract.LastModifiedUTCOffset;
dataTable.Rows.Add(行);
}

事实上,我已经找到了发生这种情况的原因。当您从datatable传入数据时,列的顺序实际上必须与您创建的类型定义相同


希望这对其他人有所帮助。

好吧,现在您的代码已经修复,因此不会出现您在回答中提到的问题。如果希望答案对未来的读者有用,我建议使用一个示例,其中表类型有三列,代码以不同的顺序引用这些列。尝试排列30列并发现问题对任何人来说都不是一个有趣的练习。问题不是它被无序填充,而是这些列被无序添加到数据表中。我甚至没有使用“填充”这个词,所以我不确定你在说什么语义。您说过“除了LastName之外,所有字段都已填充”,但您的C#代码还缺少其他三列,所以我之前的问题是,这些列可能是如何填充的。