我一直在后端工作,即在Sql server 2012中。我在表中声明了一个字段为日期,即 ParawiseDate datetime 。
我从C#传递一个NULL,即
sqlcom.Parameters.AddWithValue("@ParawiseDate", NULL);
问题:
它将日期保存为 1900-01-01 ,而不是 NULL 。我尝试""
并保存为 1900-01-01 。
为什么?
答案 0 :(得分:1)
确保它在ParawiseDate列中允许空值。而不是传递Null尝试DBNull.value
sqlcom.Parameters.AddWithValue("@ParawiseDate", DbNull.Value);
答案 1 :(得分:0)
我相信DateTime,你可以用“?”声明类型,否则他们将默认为1900-01-01
DateTime ? Parameter;
也尝试传入
typeof(System.DateTime)
而不是NULL,在第二个参数
上答案 2 :(得分:0)
必须知道数据的二进制表示是什么以及允许哪些强制转换。没有它,任何程序员都会有些失明。对于这种情况,在MS SQL中,默认日期值为1900-01-01。在旧的CLR AddWithValue中,DBNull.Value作为值等效于将字段设置为默认值。 我没有处理4.0 CLR环境,但我可能期望NULL可以被转换为DBNull?在任何情况下,它都不是日期值,或者是否可以使用默认值将NULL隐式地转换为Date? (后者会说MS再次离开标准,NULL现在必须等于指向任何对象的指针)很可能是一个没有文档的副作用。
public SqlParameter AddWithValue(
string parameterName,
object value
)
参数
parameterName
输入:System.String
参数的名称。
value
输入:System.Object
要添加的值。使用DBNull.Value
代替null,表示空值。
Date和DateTime不能为NULL,但表中的字段可以设置为允许空值。出于安全原因,通常不会读取数据会导致获取默认值。这需要单独检查(isDBNull?)
只有SQL中的日期合法值(至少是Microsoft风格)是0001-01-01到9999-12-31,应该明确给出,否则将使用默认值。
答案 3 :(得分:0)
SELECT cast(NULLIF(t.[ParawiseDate],'') AS DATE)
FROM tablename t