`
jeelee
  • 浏览: 629265 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多
转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究
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

[url]
http://blog.csdn.net/jxqvip/article/details/6565044
[/url]
分享到:
评论

相关推荐

    c#往sqlserver2000数据库中插入时间型数据的空值

    C#往sqlserver数据库中插入时间型数据时,直接插入null,数据库中会变成1900-1-1的数据,这个demo使用了参数的方法进行插入,很简单

    sqlserver 中时间为空的处理小结

    二、如何在sql语句中判断为NULL的时间字段 假设表为:TestTable SN DateTime1 DateTime2 1 2011-10-24 2011-10-25 2 NULL 2011-10-26 3 2011-10-25 NULL 用case进行查询,若写成: select (case DateTime1 ...

    SQLServer2005考试题及答案

    选择题: 1、在MS SQL Server中,用来显示数据库信息的系统存储过程是( ) A sp_ dbhelp B sp_ db C sp_ help D sp_ helpdb 2、SQL语言中,删除一个表的命令是( ) A DELETE B DROP C CLEAR D REMORE 3、关系...

    Qt可为空值的DateTimeEdit

    自认为比较友好的时间日期编辑器,继承于QDateTimeEdit, 功能相对比较完善,调用SetEmptyEnable(true)后即可实现输入空值

    BCP详细参数.txt

    重要 将数据从 SQL Server 大容量复制到数据文件时,即使指定了 –V,bcp 实用工具也不会为任何 datetime 或 smalldatetime 数据生成 SQL Server 6.0 或 SQL Server 6.5 的日期格式。日期将始终以 ODBC 格式写入。...

    sql试 题答案和试题

    3、 SQL Server中索引类型包括的三种类型分别是_________________,_________________和____________________。 4、 在SELECT语句的FROM子句中最多可以指定_______个表或视图,相互之间要用________分隔,当所查询...

    解析MySQL中存储时间日期类型的选择问题

    一般应用中,我们用timestamp,datetime,int类型来存储时间格式: int(对应javaBean中的Integer或int) 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供...

    ASP.NET编程之道.part1.rar

    谬误10 .NET和SQL Server中“空值”是一回事 谬误11 C#的结构和C++的完全一样 谬误12 方法中只有引用类型的参数才能实现引用传递 谬误13 字符串是值类型 谬误14 数据绑定表达式中Eval功能等价于Bind 谬误15 .Net中的...

    数据库原理实验报告整合

    SQL Server中的一个数据库必须至少包含一个数据文件和一个事务日志文件,所以创建数据库就是建立主数据文件和日志文件。 在SQL Server中创建数据库的方法主要有两种:一是在SQL Server Management Studio窗口中使用...

    使用Mysql5.x以上版本出现报错#1929 Incorrect datetime value: ”” for column ”createtime”的快速解决方法

    我的MySQL安装后,保存删除表数据总是出现#1929 Incorrect datetime value: ” for column ‘createtime’ 的报错提醒,导致不能删除表里数据; 原因分析: 5以上的版本如果时期时间是空值应该要写NULL; 官方解释说...

    asp.net知识库

    从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle...

    AppFramework_V1.0_New

    因为IBatisNet是直接把C#的基本类型(如int/DateTime)插入到数据库中字段的。对于一些C#值类型,例如int,并没有NULL状态。于是不得不采用一些特殊的值来表示NULL,例如int.MinValue。IBatisNet数据映射器会自动把int...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    因为IBatisNet是直接把C#的基本类型(如int/DateTime)插入到数据库中字段的。对于一些C#值类型,例如int,并没有NULL状态。于是不得不采用一些特殊的值来表示NULL,例如int.MinValue。IBatisNet数据映射器会自动把int...

    数据库数据字典.docx

    雇员信息表 修改说明 调整 数据表英文名称 Employee 功能阐述 保存雇员信息 序号 字段中文名 字段英文名 数据类型 宽度 约束 默认值 空值 自增 修改说明 1 雇员序号 EmployeeNo char 8 PK 2 雇员姓名 EmployeeName ...

    AppFramework_V1.0

    因为IBatisNet是直接把C#的基本类型(如int/DateTime)插入到数据库中字段的。对于一些C#值类型,例如int,并没有NULL状态。于是不得不采用一些特殊的值来表示NULL,例如int.MinValue。IBatisNet数据映射器会自动把int...

    test-data-generator

    将为 C# 数据类型(包括 bool、int、float、DateTime 和 string)生成语法正确的文字。 此外,CSV 数据中的任何空单元格都意味着对象初始值设定项中的空值。 如果您设计自己的数据,最简单的使用方法是从 Excel ...

    Python不规范的日期字符串处理类

    我分析了形如19920203、199203、1992.02.03、1992.02、1992-02-03、1992-02、920203时间格式特征,列出了正则表达式如下:复制代码 代码如下:^((?...复制代码 代码如下:import reimport datetime# *****

    Extjs5 日期时间

    用fieldcontainer封装一个日期和一个时间。日期用Extjs自带的Ext.form.field.Date,时间用Ext.form.field.Number和Ext.form.Label进行组装。 样式显示为横向的日期、时间,非日期弹出框下方选择日期。 调用代码:Ext...

    可空与可绑定数据源的日期编辑选择控件TDateEditPicker

    一个.NET 2.0的窗体日期编辑选择控件TDateEditPicker 1.2。支持空值与数据源绑定。实现简介和升级请参考:http://blog.csdn.net/hulihui/archive/2010/03/12/5373252.aspx 。

Global site tag (gtag.js) - Google Analytics