【问题标题】:SQL Server view not updated in MVC viewSQL Server 视图未在 MVC 视图中更新
【发布时间】:2020-05-28 00:07:52
【问题描述】:

我创建了一个 SQL Server 视图并更新了视图以仅选择没有时间的日期部分,并且该视图在 SQL Server 中正常工作,我通过单击“更新模型自”从项目图中的数据库中更新了模型数据库”。

更新后,当我在浏览器中运行项目时,它仍在读取订单日期和时间,我从模型图中删除了 SQL Server 视图并再次添加它,但是当我在浏览器中运行项目时,它仍然在读取日期和时间。

我是否需要在模型中更新模型本身的任何内容或如何解决此问题?

这是视图:

CREATE VIEW [dbo].[LAB_RESULTS_CLINIC_VIEW] 
AS 
    SELECT DISTINCT 
        [LAB_RESULTS].ORDER_ID  as 'order number',
        labtests.TestId as 'Test Id',
        labtests.TestName as 'Test Name'
       ,NORMAL_RESULT as 'Normal'     
       ,cast(LAB_RESULTS.APPROVED_DATE as date) as 'Report Date'
       ,CASE WHEN coalesce([RESULT_NUMBER],'') <> '' THEN RESULT_NUMBER WHEN coalesce(RESULT_REPORT, '') <> '' THEN RESULT_REPORT END AS Result 
       ,[RESULT_NOTE]   as 'Notes'
     ,TestsRanges.LowerLimit as 'Low Range'
      ,TestsRanges.UpperLimit as 'High Range'
     ,TestsRanges.panic_value as 'Panic'
      ,TestsRanges.text_range as 'Text Range'
       ,machines.machine_name
      ,LAB_RESULTS.CUSTID as 'Customer No'
      ,Customers.CustName as 'Customer Name'
      ,LAB_RESULTS.patient_no as 'Patient No'
      ,Patients.PATIENT_NAME as 'Patient Name'
      ,Patients.PCfileNo as 'Clinic File No'
      ,patientcat.CatName as 'Category'
      ,Patients.Age AS 'AGE'
      ,gender.gendername as 'SEX'
      ,labtests.TestNotes as 'Test Note'
      ,TestsUnits.UnitName as 'UNIT'
      ,LAB_RESULTS.deptid AS 'DEPTID'
      ,cast(Lab_Hematology_Samples.COLLECTION_DATE as date) as 'Collection Date'
      ,cast(Lab_Hematology_Samples.RECEIVING_DATE as date) as 'Receiving Date'
      ,Groups.groupdesc as 'Group Name'
      ,LAB_RESULTS.SERIAL
      ,LAB_RESULTS.GROUPID
      ,LAB_RESULTS.packageid
      ,LAB_RESULTS.EXAMINED_BY
      ,LAB_RESULTS.APPROVED_BY
      ,UPDATED_BY
      ,UPDATED_DATE
      ,Lab_Result_Comments.comments as 'Comments'
      ,Departments.Dept_name as 'department name'


  FROM [dbo].[LAB_RESULTS]
  inner join LabTests on LabTests.testid=LAB_RESULTS.TESTID
  inner join TestsRanges on  LAB_RESULTS.TESTID=TestsRanges.TestId 
  inner join Departments on  LAB_RESULTS.deptid=Departments.Dept_id 
  inner join PatientCat on patientcat.CatId = TestsRanges.CatId
  inner join Customers on Customers.CustId=LAB_RESULTS.CUSTID
  inner join patients on Patients.Patient_No = LAB_RESULTS.patient_no
 inner join machines on lab_results.machine_id = machines.machine_id
  inner join gender on gender.genderid = Patients.Gender
  inner join TestsUnits on TestsUnits.UnitId = LabTests.UnitId
  inner join Lab_Orders on Lab_Orders.ORDER_ID = LAB_RESULTS.ORDER_ID
  left join Lab_Result_Comments on LAB_RESULTS.ORDER_ID = Lab_Result_Comments.ORDER_ID
  inner join Lab_Hematology_Samples on Lab_Hematology_Samples.SAMPLE_ID = LAB_RESULTS.SAMPLE_ID
  inner join Groups on (Groups.groupid = LAB_RESULTS.GROUPID and Groups.Testid = LAB_RESULTS.TESTID )

  where (Lab_Orders.catid = TestsRanges.CatId or PatientCat.CatId =5)
  and  LAB_RESULTS.EXAMINED_DATE is not null 
  and  LAB_RESULTS.APPROVED_DATE is not null
  and  LAB_RESULTS.SAMPLE_STATUS=6
 and  (Patients.Gender = TestsRanges.PatientSex or TestsRanges.PatientSex = 1 )
  AND TestsRanges.machine_id = LAB_RESULTS.machine_id
 -- and LAB_RESULTS.update_count in (select max(update_count) from LAB_RESULTS where SAMPLE_STATUS = 6 and deptid = @deptid and ORDER_ID = @ORDER_ID)
 AND LAB_RESULTS.DEPTID IN (1,2,3,4)

  UNION ALL 

 SELECT DISTINCT [LAB_RESULTS].ORDER_ID  as 'order number'
       ,labtests.TestId as 'Test Id'     
       ,labtests.TestName as 'Test Name'
       ,NORMAL_RESULT as 'Normal'     
       ,cast(APPROVED_DATE as date) as 'Report Date'
       ,CASE WHEN coalesce([RESULT_NUMBER],'') <> '' THEN RESULT_NUMBER WHEN coalesce(RESULT_REPORT, '') <> '' THEN RESULT_REPORT END AS Result 
       ,[RESULT_NOTE]   as 'Notes'
      ,TestsRanges.LowerLimit as 'Low Range'
      ,TestsRanges.UpperLimit as 'High Range'
      ,TestsRanges.panic_value as 'Panic'
      ,TestsRanges.text_range as 'Text Range'
       ,machines.machine_name
      ,LAB_RESULTS.CUSTID as 'Customer No'
      ,Customers.CustName as 'Customer Name'
      ,LAB_RESULTS.patient_no as 'Patient No'
      ,Patients.PATIENT_NAME as 'Patient Name'
      ,Patients.PCfileNo as 'Clinic File No'
      ,patientcat.CatName as 'Category'
      ,Patients.Age AS 'AGE'
      ,gender.gendername as 'SEX'
      ,labtests.TestNotes as 'Test Note'
      ,TestsUnits.UnitName as 'UNIT'
      ,LAB_RESULTS.deptid AS 'DEPTID'
      ,cast(Lab_Hematology_Samples.COLLECTION_DATE as date) as 'Collection Date'
      ,cast(Lab_Hematology_Samples.RECEIVING_DATE as date)as 'Receiving Date'
      ,NULL AS 'Group Name'
      ,LAB_RESULTS.SERIAL
      ,LAB_RESULTS.GROUPID
      ,LAB_RESULTS.packageid
      ,LAB_RESULTS.EXAMINED_BY
      ,LAB_RESULTS.APPROVED_BY
      ,UPDATED_BY
      ,UPDATED_DATE
      ,Lab_Result_Comments.comments as 'Comments'
      ,Departments.Dept_name as 'department name'


  FROM [dbo].[LAB_RESULTS]
  inner join LabTests on LabTests.testid=LAB_RESULTS.TESTID
   inner join TestsRanges on TestsRanges.TestId = LAB_RESULTS.TESTID
   inner join Departments on  LAB_RESULTS.deptid=Departments.Dept_id 
  inner join PatientCat on patientcat.CatId = TestsRanges.CatId
  inner join Customers on Customers.CustId=LAB_RESULTS.CUSTID
  inner join machines on lab_results.machine_id = machines.machine_id
  inner join patients on Patients.Patient_No = LAB_RESULTS.patient_no
  inner join gender on gender.genderid = Patients.Gender
  inner join TestsUnits on TestsUnits.UnitId = LabTests.UnitId
  left join Lab_Result_Comments on LAB_RESULTS.ORDER_ID = Lab_Result_Comments.ORDER_ID
  inner join Lab_Orders on Lab_Orders.ORDER_ID = LAB_RESULTS.ORDER_ID
  inner join Lab_Hematology_Samples on Lab_Hematology_Samples.SAMPLE_ID = LAB_RESULTS.SAMPLE_ID


  where (Lab_Orders.catid = TestsRanges.CatId or PatientCat.CatId =5)
  and  LAB_RESULTS.EXAMINED_DATE is not null 
  and  LAB_RESULTS.APPROVED_DATE is not null
  and  LAB_RESULTS.SAMPLE_STATUS=6
  and  (Patients.Gender = TestsRanges.PatientSex or TestsRanges.PatientSex = 1 )
  and  LAB_RESULTS.GROUPID = 0
 -- and LAB_RESULTS.update_count in (select max(update_count) from LAB_RESULTS where SAMPLE_STATUS = 6 and deptid = @deptid and ORDER_ID = @ORDER_ID)
 -- and LAB_RESULTS.deptid = @deptid
  AND TestsRanges.machine_id = LAB_RESULTS.machine_id
  AND LAB_RESULTS.DEPTID IN (1,2,3,4)
GO

这是我的日期字段更新为仅选择日期部分并在正确的 SQL SERVER 中工作:

    cast(APPROVED_DATE as date) as 'Report Date'
    ,cast(Lab_Hematology_Samples.COLLECTION_DATE as date) as 'Collection Date'
   ,cast(Lab_Hematology_Samples.RECEIVING_DATE as date)as 'Receiving Date'

这是模型详细信息:

public partial class LAB_RESULTS_CLINIC_VIEW
    {
        public int order_number { get; set; }
        public int Test_Id { get; set; }
        public string Test_Name { get; set; }
        public string Normal { get; set; }
        public Nullable<System.DateTime> Report_Date { get; set; }
        public string Result { get; set; }
        public string Notes { get; set; }
        public string Low_Range { get; set; }
        public string High_Range { get; set; }
        public string Panic { get; set; }
        public string Text_Range { get; set; }
        public string machine_name { get; set; }
        public Nullable<int> Customer_No { get; set; }
        public string Customer_Name { get; set; }
        public Nullable<int> Patient_No { get; set; }
        public string Patient_Name { get; set; }
        public string Clinic_File_No { get; set; }
        public string Category { get; set; }
        public Nullable<int> AGE { get; set; }
        public string SEX { get; set; }
        public string Test_Note { get; set; }
        public string UNIT { get; set; }
        public Nullable<int> DEPTID { get; set; }
        public Nullable<System.DateTime> Collection_Date { get; set; }
        public Nullable<System.DateTime> Receiving_Date { get; set; }
        public string Group_Name { get; set; }
        public Nullable<int> SERIAL { get; set; }
        public int GROUPID { get; set; }
        public Nullable<int> packageid { get; set; }
        public string EXAMINED_BY { get; set; }
        public string APPROVED_BY { get; set; }
        public string UPDATED_BY { get; set; }
        public Nullable<System.DateTime> UPDATED_DATE { get; set; }
        public string Comments { get; set; }
        public string department_name { get; set; }
    }
}

这是查看浏览器,您看到收款日期、收款日期和报告日期出现日期+时间:

【问题讨论】:

  • 虽然您可以在 SQL Server 中拥有一个 只有 日期部分(没有时间)的 DATE,但没有 没有等价物在 .NET 中 - C# 数据类型 DateTime始终 有一个时间部分 - 00:00:00 如果数据库中的值是 DATE,但仍然如此。如果您不希望这样,您需要在网格中更改输出格式以仅显示日期部分
  • @marc_s 是的,我只需要没有时间的日期我将如何将其从视图和站点中删除?怎么办?
  • 在视图中,一切就绪 - CAST(... AS DATE) 做到了。正如我所说,在 .NET 中 - 您不能“删除”时间部分 - 它始终存在。但是您正在使用的 grid 应该允许您指定如何呈现 DateTime 并且应该允许一种格式仅显示 DateTime 的日期部分价值。但我不知道您使用的是什么网格以及如何在您的网格中执行此操作 ---> 阅读文档 为您的网格!

标签: asp.net-mvc


【解决方案1】:

将以下行添加到您的模型中 首先为数据注释添加库:

 using System.ComponentModel.DataAnnotations;

然后添加以下行来格式化日期:

   [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]

public partial class LAB_RESULTS_CLINIC_VIEW
    {
        public int order_number { get; set; }
        public int Test_Id { get; set; }
        public string Test_Name { get; set; }
        public string Normal { get; set; }

        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> Report_Date { get; set; }

        public string Result { get; set; }
        public string Notes { get; set; }
        public string Low_Range { get; set; }
        public string High_Range { get; set; }
        public string Panic { get; set; }
        public string Text_Range { get; set; }
        public string machine_name { get; set; }
        public Nullable<int> Customer_No { get; set; }
        public string Customer_Name { get; set; }
        public Nullable<int> Patient_No { get; set; }
        public string Patient_Name { get; set; }
        public string Clinic_File_No { get; set; }
        public string Category { get; set; }
        public Nullable<int> AGE { get; set; }
        public string SEX { get; set; }
        public string Test_Note { get; set; }
        public string UNIT { get; set; }
        public Nullable<int> DEPTID { get; set; }

        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> Collection_Date { get; set; }

        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> Receiving_Date { get; set; }

        public string Group_Name { get; set; }
        public Nullable<int> SERIAL { get; set; }
        public int GROUPID { get; set; }
        public Nullable<int> packageid { get; set; }
        public string EXAMINED_BY { get; set; }
        public string APPROVED_BY { get; set; }
        public string UPDATED_BY { get; set; }
        public Nullable<System.DateTime> UPDATED_DATE { get; set; }
        public string Comments { get; set; }
        public string department_name { get; set; }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多