1

这是我第一次在 .Net MVC 中查询数据库存储过程。该过程返回零行(意味着用户从未输入过数据)或一行,其中一列称为 [When],其中包含日期。

我有一个 DataHelper 类,我在其中编写了以下方法来查询存储过程。

DataHelper 类方法

public static DataSet Measurements_GetLastMeasurement(Guid UserID)
{
    using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(CONN_STRING))
    {
        conn.Open();
        System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand();
        comm.Connection = conn;
        comm.CommandType = CommandType.StoredProcedure;
        comm.CommandText = "dbo.Measurements_GetLastMeasurement";

        comm.Parameters.AddWithValue("@UserID", UserID);

        System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(comm);
        System.Data.DataSet ds = new DataSet();
        da.Fill(ds);

        return ds;
    }
}

这很简单,它将数据传递到控制器,然后传递到我迷路的视图。如果此查询的结果返回一个日期,我想将该日期打印到屏幕上。如果它返回 null 我想存储 null 值并对其运行条件。这是我当前设置部分控制器方法来处理此问题的方式。

控制器方法

public ActionResult ChartView()
{  
    var authHelper = new stuff.for.auth();
    var userSession = authHelper.GetUserSession();    

    // get users last data entry date
    DataSet ds = Measurements_GetLastMeasurement(userSession.UserIDNative);
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        DateTime lastEntryDate = dr["When"];
    }

    ViewData["LastEntryDate"] = lastEntryDate;

    return PartialView();
  } 

然后从视图中,我认为我应该能够通过将 ViewData["LastEntryDate"] 设置为变量并将其显示在 html 中或使用 Javascript 来检查值是否为空来访问数据。非常感谢任何澄清或指导!

4

1 回答 1

1
  1. 必须在 foreach 循环之外为变量定义变量,以便在设置 ViewData["LastEntryDate"] = lastEntryDate; 时它在范围内。
  2. 变量必须是 DateTime?(又名 Nullable<DateTime>)以使 null 成为有效值

尝试这个:

        DateTime? lastEntryDate = null;
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            lastEntryDate = (DateTime?)dr["When"];
        }

        ViewData["LastEntryDate"] = lastEntryDate;
于 2013-08-27T21:11:51.687 回答