在 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