【问题标题】:Can't get some data from database无法从数据库中获取某些数据
【发布时间】:2012-12-20 10:47:37
【问题描述】:

我正在使用 VS 2010 和 SQL Server 2008。

我不断收到“空对象必须有值”的错误。

我的代码是

public DataTable GetProgressOverview()
    {
        DataTable dtProgressOverview = new DataTable();
        dtProgressOverview.Columns.Add("studentName", typeof(string));
        dtProgressOverview.Columns.Add("lessonName", typeof(string));
        dtProgressOverview.Columns.Add("BeginDate", typeof(string));
        dtProgressOverview.Columns.Add("EndDate", typeof(string));
        dtProgressOverview.Columns.Add("EmailAddress", typeof(string));
        dtProgressOverview.Columns.Add("teacherName", typeof(string));
        dtProgressOverview.Columns.Add("numberOffUnits", typeof(int));
        dtProgressOverview.Columns.Add("numberOffFilledUnits", typeof(int));
        dtProgressOverview.Columns.Add("percentage", typeof(double));
        dtProgressOverview.Columns.Add("subscriptionID", typeof(Guid));
        dtProgressOverview.Columns.Add("studentID", typeof(Guid));
        dtProgressOverview.Columns.Add("teacherID", typeof(Guid));
        dtProgressOverview.Columns.Add("YearName", typeof(string));
        dtProgressOverview.Columns.Add("YearID", typeof(Guid));
        dtProgressOverview.Columns.Add("lessonID", typeof(Guid));
        dtProgressOverview.Columns.Add("status", typeof(bool));
        dtProgressOverview.Columns.Add("CompanyID", typeof(Guid));
        dtProgressOverview.Columns.Add("SubCompanyID", typeof(Guid));
        dtProgressOverview.Columns.Add("CompanyName", typeof(string));
        dtProgressOverview.Columns.Add("SubCompanyName", typeof(string));
        dtProgressOverview.Columns.Add("MentorID", typeof(Guid));
        dtProgressOverview.Columns.Add("MentorName", typeof(string));


        var progressOverview = from pg in Db.viewGetProgressOverviews
                               //where pg.CompanyID.Equals("0a9438cc-c188-46d6-9e1e-08bc7afcb0c7")
                               orderby pg.yearName
                               select pg;

        foreach (var sub in progressOverview)
        {
            Guid CompanyID = Guid.Empty;
            Guid SubCompanyID = Guid.Empty;
            Guid MentorId = Guid.Empty;
            string MentorName = string.Empty;
            string studentName = sub.studentName;
            string lessonName = sub.lessonName;
            DateTime BeginDate = sub.BeginDate.Value;
            DateTime EndDate = sub.EndDate.Value;
            string EmailAddress = sub.EmailAddress;
            string teacherName = sub.teacherName;
            int numberOffUnits = sub.numberOffUnits.Value;
            int numberOffFilledUnits = sub.numberOffFilledUnits.Value;
            decimal percentage = Math.Round(sub.percentage.Value, 2);
            Guid subscriptionID = sub.subscriptionID.Value;
            Guid studentID = sub.studentID.Value;
            Guid teacherID = sub.TeacherID.Value;
            string yearName = sub.yearName;
            Guid yearID = sub.yearID.Value;
            Guid lessonID = sub.lessonID.Value;
            bool status = sub.Status.Value;
            string CompanyName = string.Empty;
            string SubCompanyName = string.Empty;
            if (sub.CompanyID != null)
            {
                CompanyID = sub.CompanyID.Value;
                CompanyName = sub.CompanyName;
            }

            if (sub.SubCompanyID != null)
            {
                SubCompanyID = sub.SubCompanyID.Value;
                SubCompanyName = sub.SubCompanyName;
            }
            if (sub.MentorID != null)
            {
                MentorId = sub.MentorID.Value;
                MentorName = sub.mentorName;
            }


            dtProgressOverview.Rows.Add(studentName,
                lessonName,
                BeginDate.ToShortDateString(),
                EndDate.ToShortDateString(),
                EmailAddress,
                teacherName,
                numberOffUnits,
                numberOffFilledUnits,
                percentage,
                subscriptionID,
                studentID,
                teacherID,
                yearName,
                yearID,
                lessonID,
                status,
                CompanyID,
                SubCompanyID,
                CompanyName,
                SubCompanyName,
                MentorId,
                MentorName
                );
        }

        return dtProgressOverview;

    }

当我调试它时,它显示行错误

DateTime BeginDate = sub.BeginDate.Value;

但我认为错误是因为该表没有返回任何记录我不知道为什么..

当我像

一样更改查询时
 var progressOverview = from pg in Db.viewGetProgressOverviews
                                   where pg.CompanyID.Equals("0a9438cc-c188-46d6-9e1e-08bc7afcb0c7")
                                   orderby pg.yearName
                                   select pg;

它有效。

但是对于孔表,它给出了空对象的错误。

谁能帮帮我?

【问题讨论】:

  • 你确定每一行都有一个 BeginDate 吗?
  • 也许 BeginDate 列被声明为datetime null
  • 是的,它必须有..而且我得到的每一行都为空,甚至没有开始日期。

标签: linq sql-server-2008 c#-4.0


【解决方案1】:

你可以试试这个:

DateTime? BeginDate = sub.BeginDate.Value

【讨论】:

  • 是的,它可以做到。但我认为这里的问题不是由于它。我在这里使用的视图不会为任何记录提供价值。这就是它给出错误的原因。
猜你喜欢
  • 2017-09-21
  • 2018-05-28
  • 2012-01-06
  • 2021-10-25
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多