在c#中将服务器端的值转换为NULL

时间:2013-12-03 12:20:47

标签: c# sql sql-server stored-procedures datagrid

我有一个使用存储过程填充网格的方法。 SP从数据库表中获取数据,但其中一列将日期显示为“01/01/1754 00:00:00”。我希望这个值在网格上显示为NULL。

我该怎么做?

这是我调用SP的代码,我需要某种IF语句吗?

public static DataTable getUserList()
{
    SqlConnection con = getConnection();
    SqlCommand cmd = new SqlCommand("PrepaidUserList", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["SqlTimeout"]);

    cmd.Parameters.AddWithValue("@ApplicationName", Membership.ApplicationName);

    DataSet ds = new DataSet();
    SqlDataAdapter dad = new SqlDataAdapter(cmd);

    try
    {
        con.Open();
        dad.Fill(ds);
    }
    finally
    {
        con.Close();
    }

    return ds.Tables[0];
}

由于

2 个答案:

答案 0 :(得分:0)

你有2个选项第一个是在数据库中停止这种类型的日期条目而另一个是请改变程序并使用CASE WHEN DateColumn = '01 / 01/1754 00:00:00'然后NULL ELSE DateColumn END < / p>

答案 1 :(得分:0)

一种选择是使用RowDataBound事件。由于每行数据都绑定到网格,因此您可以修改网格中每个单元格的内容。

在您的情况下,您将检查日期列的值并检查它是否与常量值'01 / 01/1754 00:00:00'匹配,如果它确实将单元格内容文本设置为“Null” (或者你想要的任何东西)。

所以使用以上链接中的示例:

protected void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
  {
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      if (e.Row.Cells[1].Text == "01/01/1754 00:00:00")
      {
          e.Row.Cells[1].Text = "Null";
      }
    }
  }

有更好的方法可以做到这一点,例如我认为您可以使用列名而不是索引器。同时将日期移动到未硬编码到方法中的常量值。

NB 还要注意硬编码日期值的危险,如果部署到具有不同日期格式(区域设置)的计算机,则常量值可能无效日期格式即将到来。

link也应该对您有所帮助。