【发布时间】:2019-07-22 17:25:52
【问题描述】:
我很奇怪,我在创建的存储过程中得到空值。
我创建了一个类似这样的类型:
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。
我还注意到除了姓氏之外的所有字段都已填充。
foreach (var contract in people)
{
var row = dataTable.NewRow();
row["Title"] = contract. Title;
row["FirstName"] = contract.FirstName ;
row["MiddleName"] = contract.MiddleInitial ;
row["LastName"] = contract.LastName ;
row["DisplayName"] = contract.DisplayName ;
row["Suffix"] = contract.Suffix ;
row["WorkPhone"] = contract.WorkPhone ;
row["Extension"] = contract.Extension ;
row["HomePhone"] = contract.HomePhone ;
row["CellPhone"] = contract.CellPhone ;
row["Pager"] = contract.Pager ;
row["Fax"] = contract.Fax ;
row["EMail"] = contract.EmailAddress ;
row["SecondaryEMail"] = contract.SecondaryEmailAddress ;
row["Notes"] = contract.Notes ;
row["Department"] = contract.Department ;
row["Position"] = contract.Position ;
row["Building"] = contract.Building ;
row["Office"] = contract.Office ;
row["LicensePlateNumber"] = contract.LicensePlateNumber ;
row["EmployeeId"] = contract.EmployeeId ;
row["Company"] = contract.Company ;
row["ExternalId"] = contract.ExternalId ;
row["ZoneID"] = contract.ZoneID ;
row["LastModifiedUTCOffset"] = contract.LastModifiedUTCOffset ;
dataTable.Rows.Add(row);
}
【问题讨论】:
-
好吧,现在您的代码已修复,因此它没有您在回答中提到的乱序问题。如果您希望答案对未来的读者有用,我建议仅使用表类型具有三列并且代码以不同顺序引用这些列的示例。尝试排列 30 列并发现问题对任何人来说都不是一个有趣的练习。
-
问题不是它被乱序填充,而是列被乱序添加到数据表中。
-
我什至不使用“填充”这个词,所以我不确定你在说什么语义。 您说“除了姓氏之外的所有字段都已填充”,但您的 C# 代码还缺少其他三列,所以我之前的问题是询问如何填充这些列。
标签: c# datatable sql-server-2012 sql-types