我有一个传递了一个字符串的API,这个特定系统将其视为NULL“1/1/1900”。我已经看到other users插入了类似的值,其中SQL需要为null。我尝试了这个古怪的设置:
static void Main(string[] args)
{
var input = "01/1/1900";//this does NOT evaluate to DBNull
var result = IsBasicallyNull(input);
}
private static bool IsBasicallyNull(string input)
{
if (String.IsNullOrWhiteSpace(input))
return true;
if (DBNull.Value.Equals(input))//THis doesn't work
return true;
//hack and slash
DateTime output;
var isValidDateTime = DateTime.TryParse(input, out output);
if (isValidDateTime)
{
if (output == DateTime.MinValue)
return true;
else if (output.Year.ToString() == "1900" && output.Day.ToString() == "1" && output.Month.ToString() == "1")
return true;
}
return false;
}
很明显,DBNull.Value
并非构建为支持此"1/1/1900"
(MM / DD / YYY)奇怪。在SQL中获取此值并将其视为NULL
是否异常?你知道这个价值来自哪里吗?
答案 0 :(得分:3)
过去我有一个类似的问题。某些类型为smalldatetime但未接受空值的列填充了Minumum Value of a smalldatetime字段。而这正好恰好是1/1/1900。
要考虑这些列,因为它们是空值,我以这种方式强制使用像你这样的代码
$.ajax({
url: "http://127.0.0.1:8081/del_user",
type: "DELETE"
});
答案 1 :(得分:0)
如果您想检查某个特殊日期的字符串表示,input
,您永远无法与DBNull.Value
进行比较,因为它完全不同。尝试与new DateTime( 1900, 1, 1 ).ToString()
进行比较而不是。
答案 2 :(得分:0)
如果我理解您的意思,那么在空DateTime
的情况下,您的API会插入1/1/1900。如果是这种情况,API也可能具有实现此功能的自定义对象。我刚刚处理了一个与此类似的案例。检查'null'的正确方法是将其强制转换回自定义对象,并使用提供的字段测试null。像这样:
if (CustomDateObject.Parse(input).IsDateTimeNull)
return true;