如何防止日期类型字段空值在.net里默认值出现0001/01/01,因为此值是非法日期类型。

postfxj 2008-06-17 11:39:59
如何防止日期类型字段空值在.net里默认值出现0001/01/01,因为此值是非法日期类型。
...全文
794 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
w3711524 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 postfxj 的回复:]
引用 5 楼 cacar2008 的回复:
0001/01/01=datetime.minvalue
0001/01/01 代表是未初始化,需手动赋个默认值

如何让它不是0001/01/01而是空。
[/Quote]
DateTime? dt = null;
seahi 2008-06-18
  • 打赏
  • 举报
回复
也有类似的困惑,友情帮顶。
postfxj 2008-06-18
  • 打赏
  • 举报
回复
我顶一下,
再顶。


postfxj 2008-06-18
  • 打赏
  • 举报
回复
触发器能解决这样的问题?没见过。
chxtp 2008-06-18
  • 打赏
  • 举报
回复
用的是SQLSERVER还是ACCESS SQLSERVER用触发器 ACCESS里可以设置默认值为DataTime。NOW
postfxj 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xxoo2007 的回复:]
原来也遇到这个毛病, 生成的sql语法插入总是出错. 最好还是给个 DateTime.MinValue 默认值了事.要设置成空需要使用nullable的datetime,要改model dal 数据赋值部分,麻烦多多. 懒
[/Quote]
插入语句如果把给为DBull.value不会出错,如果是更新语句就又会出错,因为更新语句中有where语句,where语句中有datetime型的,就又会出同样的错。
如果更新句中的where语句只跟着主键走就没事了。主键不可能有空值。

如何改model呀
postfxj 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyi8808 的回复:]
C# codeDateTime? dt = null;
[/Quote]
这是什么意思呀
postfxj 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuyi8808 的回复:]
显式赋上null;
[/Quote]
什么意思呀。如何弄呀。
postfxj 2008-06-18
  • 打赏
  • 举报
回复
解决了,代码改为如下就不会有任何问题了。

public static bool UpdateDataBase(DataSet ds, string[] tableName, string[] tempSql)
{
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
try
{
for (int i = 0; i < tableName.Length; i++)
{
SqlCommand cmd = new SqlCommand(tempSql[i], conn);
cmd.Transaction = tran;
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder bld = new SqlCommandBuilder(da);
bld.ConflictOption = ConflictOption.OverwriteChanges;
for (int j = 0; j < bld.GetInsertCommand().Parameters.Count; j++)
{
bld.GetInsertCommand().Parameters[j].IsNullable = true;
}

for (int j = 0; j < bld.GetUpdateCommand().Parameters.Count; j++)
{
bld.GetUpdateCommand().Parameters[j].IsNullable = true;
}

da.Update(ds, tableName[i]);
}
ds.AcceptChanges();
tran.Commit();
return true;
}
catch
{
tran.Rollback();
throw;
}
}
mengyao 2008-06-18
  • 打赏
  • 举报
回复
原理是一样,我也是碰到了
http://blog.csdn.net/mengyao/archive/2008/05/28/2488671.aspx
poxi_nick 2008-06-18
  • 打赏
  • 举报
回复
这个问题很简单: 声明的时候用 Nullable<DateTime> mytime;这样就不会出现问题了,它的默认值是 Null 你使用的时候判断一下是否为 Null 问题就解决了.
  • 打赏
  • 举报
回复
strTime = System.DateTime.Now.ToString();//当前时间
?=strTime.ToString();//当前时间
postfxj 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cacar2008 的回复:]
0001/01/01=datetime.minvalue
0001/01/01 代表是未初始化,需手动赋个默认值
[/Quote]
如何让它不是0001/01/01而是空。
cacar2008 2008-06-17
  • 打赏
  • 举报
回复
0001/01/01=datetime.minvalue
0001/01/01 代表是未初始化,需手动赋个默认值
ziseliuxingzh 2008-06-17
  • 打赏
  • 举报
回复
手动赋个你想要的默认值就好了
postfxj 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vrhero 的回复:]
DateTime?类型...
[/Quote]
是呀,在有的电脑里默认值就是null,在有的电脑里默认值变为0001/01/01了。
wdgphc 2008-06-17
  • 打赏
  • 举报
回复
赋默认值为Now.
vrhero 2008-06-17
  • 打赏
  • 举报
回复
DateTime?类型...
xxoo2007 2008-06-17
  • 打赏
  • 举报
回复
原来也遇到这个毛病, 生成的sql语法插入总是出错. 最好还是给个 DateTime.MinValue 默认值了事.要设置成空需要使用nullable的datetime,要改model dal 数据赋值部分,麻烦多多. 懒
wuyi8808 2008-06-17
  • 打赏
  • 举报
回复
显式赋上null;
加载更多回复(4)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧