【问题标题】:DataTable not populating a datatype fully in sql serverDataTable 未在 sql server 中完全填充数据类型
【发布时间】: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


【解决方案1】:

我实际上已经弄清楚了发生这种情况的原因。当您从数据表中传递数据时,列实际上必须与您创建的类型定义的顺序相同。

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

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多