解决asp.net(C#)中 DataTime 空值 null为0001-01-01

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究

在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00,C#中DateTime的空值是最小值0001-01-01 00:00:00,对于数据库的插入,更新为空值的日期值来说多少有点不如人所愿。比如说我插入的是空值我取出的也要是空值,但SqlServer偏偏给了我一个默认值。有点无奈。对于如何协调二者,给我带来了不少麻烦。

引起这样的原因是:DateTime和Int,Double一样都是值类型,必须有一个值。

解决的办法:

1.从数据库的角度:把该字段的类型改为自定义的字符串型,该字符串格式为日期样式。这种办法比较简单,其实就是字符串型,插入时对插入的字符串做日期的正则判断。

 

2.这种方法是从网上搜索出于:http://treexyz.spaces.live.com/blog/cns!6667864a1ffeabc7!300.entry 对数据类型null的处理当C#与SQL Server数据类型定义不一致时需要怎么处理呢?

例如一个DateTime,当DB中该字段可以为空时,要求它既能用C#的DateTime赋值,又可以赋SQL Server的null值。

我采用的解决方法是,在Model对应的类中,将该字段对应的property的数据类型设为object。

赋值时,判断,若是空值则赋给DBNull.Value。

取值时,判断,若取到DBNull.Value则显示null,否则要进行一次数据转换。

这是为了DA在对DB操作时,若将此字段作为参数,只需要将get到的值直接赋给salParameter即可。(若model的get不转换,则DA中要判断是否要转换。因为C#的DBNull和DateTime均可赋给sqlDBType.DateTime;反之,sql中取到的空值是以DBNUll.Value出现的,不能赋给C#的DateTime。

Forum有一个很大的特点,就是在调用DB.cs的方法时,参数的类型几乎都是object。在sp中再仔细定义各参数的格式,由sql自己转换。对于可空的参数,在sp中定义=null即可。Forum传一个null参数的情况很多,总是在接收方去判断参数,有些参数是null写入数据库的;但是有些参数如果为null是有其它意义的,需要条件分支代码去处理。而我习惯于参数首先初始化,如果有不同情况共用同一个方法则增加一个参数用于判断。我认为使参数为null也有实际意义不是很好的办法,因为会造成一些不明意义的条件分支,对以后的升级和维护造成潜在的危险。

 

3.如下语句能实现插入:

insert into Employees (lastname,firstname,hiredate) values ('hu','shuai',null),

insert into Employees (lastname,firstname,hiredate) values ('hu','shuaishuai','')

有着明显不同的结果。可以在Sql 语句上实现。但在程序中,特别是面向对象的程序设计中,在加上三层架构的一些问题。实现起来颇为不便。所以我正在努力寻找一种方法巧妙的实现之,也希望大家给点建议。

三 。

最简单的方法:

在页面赋一个默认日期

在sql语句中参数赋值时判断参数值是否等于默认日期 如果等于为参数赋值DBNull.Value

 

eg:

#Eval("CANCELACCT_DATE").ToString() == DateTime.MinValue.ToString() ? string.Empty :。。。。。

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/6179122.html ,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6月前
|
开发框架 .NET C#
ASP.Net c# 正则表达式 子表达式 group
ASP.Net c# 正则表达式 子表达式 group
36 0
|
10月前
|
开发框架 前端开发 .NET
C# ASP.NET Core开发学生信息管理系统(一)
C# ASP.NET Core开发学生信息管理系统(一)
283 0
|
SQL Java 数据库
【MybatisPlus】MP的分页查询、多条件查询以及查询过程中解决null的空值判定
分页查询、多条件查询以及查询过程中解决null的空值判定
1325 0
【MybatisPlus】MP的分页查询、多条件查询以及查询过程中解决null的空值判定
|
19小时前
|
XML 开发框架 .NET
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
|
6月前
|
Java
java servlet 文件上传 req.getPart null 返回空值
java servlet 文件上传 req.getPart null 返回空值
72 0
|
2月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
76 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
109 5
|
8月前
|
存储 关系型数据库 MySQL
MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
一篇短文让你明白MySQL数据库的表中 NULL 和 空值之间的区别!
4836 0
MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
|
4月前
|
开发框架 .NET 定位技术
asp.net core3.1 c# 生成三种sitemap
asp.net core3.1 c# 生成三种sitemap
17 0
|
4月前
|
开发框架 .NET Java
ASP.NET Core高级编程--C#基本特性(一)
本文章简略介绍C#的部分特性