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

Posted

技术标签:

【中文标题】在 C# 中的服务器端将值转换为 NULL【英文标题】:Converting a Value to NULL on server side in c# 【发布时间】:2013-12-19 12:06:03 【问题描述】:

我有一个使用存储过程填充网格的方法。 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];

谢谢

【问题讨论】:

在不否认您有充分的理由使用最小日期的情况下,您是否考虑过重构事物以正确使用 NULL,而不是首先插入错误的误导性数据? 我无法更改数据库表,因为它可能会影响应用程序的其他部分。我只是在进行更改,以便更易于阅读... 【参考方案1】:

一种选择是使用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";
      
    
  

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

注意还要注意硬编码日期值的危险,如果您部署到具有不同日期格式(区域设置)的机器,您的常量值可能无效日期格式会出现。

这个link 也应该对你有所帮助。

【讨论】:

感谢您的帮助,但我无法创建新方法,我需要将代码放入我发布的方法中。因此,它会检查数据集中的每一行是否为“01/01/1754 00:00:00”,然后将其替换为“NULL” 那么我相信您唯一的选择(据我所知)是遍历 dt.Tables[0] 中的每一行,进行必要的检查并将其插入新的数据表(见***.com/questions/1042618/…)。然后您可以返回新的数据表。 如果你能发布它真的很有帮助,我已经尝试遍历每一行,但我不断收到错误。再次感谢您的帮助... 不用担心创建新的数据表,只需在返回之前对其进行编辑,代码示例请参见此处接受的答案 (***.com/questions/17338639/…)。【参考方案2】:

您有 2 个选项第一个是停止在数据库中输入此类日期,另一个是请更改过程并使用 CASE WHEN DateColumn='01/01/1754 00:00:00' 然后 NULL ELSE DateColumn END

【讨论】:

我无法更改存储过程,因为它可能会影响应用程序的其他部分。我只是在进行更改,以便更易于阅读... 那么您需要在网格视图列中进行更改,例如

以上是关于在 C# 中的服务器端将值转换为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

将值 null 转换为输入 json 中的“System.DateTime”时出错

浏览器端将语音转换为URL格式的字符串(base64 位编码)

c# nullable double to actionscript NaN through fluorine gateway

AIDL中的in,out,inout

Webservice 返回 XML 数据,C# 将值视为 null

Newtonsoft Json 将值 null 转换为类型“System.Int32”时出错