- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我四处搜索,但还没有为我的问题找到令人满意的答案:
概述:我正在开发一个小型应用程序,该应用程序使用 WCF 将多个 DateTime 字段用于一个表中。我们正在尝试消除所有表中的空字段。到目前为止,每当我们转换从表中选择的日期时间字段时,我们首先会在显示或“使用”它之前验证它是否为空。如果该值为 NULL,我们将用 DateTime.MinValue
替换该值。由于我们现在要删除所有字段的可空方面,因此我们需要插入一个表示空的公共(public)值;由于 DateTime.MinValue()
在代码中的任何地方都被替换,因此将其作为空替换值放入字段似乎是一个可行的值。
问题:插入 DateTime.MinValue()
会导致一般的“执行此请求时出现问题”错误。
解决方案? :正如在其他地方记录的那样,DateTime.MinValue()
有一个未指定的 DateTimeKind 所以......我们添加 ToUniversalTime 调用,如:
DateTime nullDate = DateTime.MinValue.ToUniversalTime(); // 1/1/0001 6:00:00 AM
这不起作用,可能是因为 WCF 上日期转换中的某些“可接受范围”设置?
注释中注明的结果值为“1/1/0001 6:00 am”。除了奇怪的早上 6:00 或年份“1”,这似乎还不错。 (考虑到像 12:00 AM 1970 这样的默认年份的过去仍然相当标准,但我离题了......)
是的,我知道 DateTime 不是 C#,它是 .NET。我还知道 WCF 在其转换约束中允许使用某种形式的“最小”和“最大”时间。我不知道如何设置它们(我也不知道如何设置 VerboseMessages 位;我是 WCF 的新手。)
手动创建一个可以很好地转换到表中的新字段值的建议是可行的,并且有效:
DateTime nullDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
(顺便说一句,如果我们使用年份 1 而不是 1970(例如),插入也会失败。)
即使我们使用上面的 nullDate 作为可行的替代品...问题是代码中的任何地方我们仍然根据表示空日期的 DateTime.MinValue()
进行评估,并且这两个日期并不完全相同。
我能想到的唯一可行的解决方案是覆盖或以其他方式从 DateTime 创建一个扩展类以创建一个通用的 NullDate 并相应地修改所有代码。
有没有人看到一个好的选择?有谁知道将 System.DateTime.MinValue()
插入 WCF 表的解决方案,例如更改好/坏日期的可接受边界?
我觉得我将不得不硬着头皮更改所有对 MinValue 的引用...我正在努力避免这种情况,因为它在评估“默认”值时不遵循任何标准的逻辑思想.
有什么建议吗?
最佳答案
这取决于您用来存储数据的数据库。例如,SQL Server 的最小日期为 1/1/1753,请参阅 MSDN .我不确定 Oracle。
如果你必须使用一个神奇的日期,你可以使用那个,或者其他特定的日期(我使用 1815 年 12 月 10 日是为了纪念第一位程序员 Ada Lovelace 女士)。一般来说,如果您遇到没有已知值的情况,数据存储应该将该值表示为“null”。现在在实践中,这并不总是可行的。您可以做的是将可为 null 的列重构到一个子表中,并且仅在您确实有要记录的内容时才包含子记录。
关于C#、WCF 和 DateTime.MinValue() 与空日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614406/
我想知道,为什么 SqlDateTime.MinValue 与 DateTime.MinValue 不一样? 最佳答案 我认为 SQL 和 .NET 的 Date 数据类型之间的差异源于 SQL Se
在 C# 中我看到了 -1 * int.MinValue == int.MinValue 这是一个错误吗?当我试图实现搜索树时,它真的把我搞砸了。我最终使用了 (int.MinValue + 1) 这
我第一次尝试这个(在 vb.net 中) (Double.MinValue + Double.Epsilon) > Double.MinValue 但这评估为假。然后我尝试了这个 (Double.Mi
考虑下面的 C# 代码: public class Program { public static void Main(string[] args) { //Your
是否可以为 minValue 规则编写依赖回调,例如使用所需的文本? 我有 2 个必填字段 -> 已付价格和已见价格(对于回扣表格)。我尝试写这样的东西: minValue: functio
我正在使用返回 1.1.0001 的 Datetime.Minvalue。此值无法存储到 DB,因为年份小于 1975。 是否可以将 DateTime.Minvalue 覆盖为 1.1.1901? 问
我正在尝试将 Int64.MinValue (-0x8000000000000000) 写为负十六进制数,但 Visual Studio 2010 不允许我这样做,因为它假定 0x8000000000
最近在分析 session 期间,一种方法引起了我的注意,在分析器的反编译版本中它看起来像这样: public static double dec2f(Decimal value) { if
我刚刚发现我的 SqlDateTime.MinValue 在不同的机器上是不同的。 有时是 = DateTime(1953, 1, 1, 0, 0, 0); 但在其他机器上它是 = DateTime(
我正在学习 Java 并正在阅读一本 Java 编程书。我已经到了他们教我有关数组的程度。 因此,我创建了一个采用非特定数量的命令行参数的数组,并将其与书籍代码结合起来以打印出该数组中的最大值。它工作
我正在编写一个使用 Quartz.Net 的 F# 服务轮询另一个服务(已用 C# 编写): [] [] type PollingJob() = interface IJob with
所以我目前正在尝试测试一个使用随机函数的函数。为了测试它,我将一个种子值传递给 C# Random 函数。 (即系统。随机) 我的测试用例涉及使用 int.MaxValue 和 int.MinValu
我们试图在我们的应用程序中覆盖 DateTime.MinValue,但是这样做我们注意到我们的 Web 服务超时,下面是示例代码。不确定哪里出了问题/我们缺少什么。 public MainWindo
如演示中所示,maxValue 设置为 2017 年,但图表一直到 2020 年。 如何让图表真正停在 2017 年?它在我的页面上占用了太多空间,因此我想对其进行优化 See demo fiddle
我在使用 TimeSpans 时找到了关于 TimeSpan.MinValue 的信息在 MSDN 中。我想知道为什么他们将其直接包含在类里面,或者更好:是否有一个经典示例说明您为什么/何时要使用它。
当我写这段代码的时候 Console.WriteLine(-1 * int.MinValue); 或 int a = -1 * -2147483648; 我得到一个错误 The operation o
我找不到如何检查大于 0 的值,因为 minValue(0) 也接受 0,但是如果使用 minValue(1) 那么任何介于 0 之间的小数并且 1 也不会被接受。 我也不知道为什么我不能使用来自 d
我正在尝试绘制具有对数刻度的 Google 条形图。但是,它从 1 开始,而不是 0。这看起来像是错误数据,因为具有一个值的条目在呈现时没有条形。我尝试将 minValue 设置为零,但当 logSc
我认为这看起来像是 C# 编译器中的错误。 考虑这段代码(在一个方法中): const long dividend = long.MinValue; const long divisor = -1L;
我似乎无法将 sqldatatime.minvalue 转换为 datetime 对象。 我试过: Datetime dt = Convert.ToDateTime(SqlDateTime.MinVa
我是一名优秀的程序员,十分优秀!