使用c#构造date数据类型

正在连接未来

正在连接未来

2016-02-19 10:40

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的使用c#构造date数据类型,过去的都会过去,迎接崭新的开始,释放更美好的自己。
/***********************************
作者:trieagle(让你望见影子的墙)
日期:2009.8.14
注: 转载请保留此信息
************************************/
使用c#构造date数据类型
在sql server2005没有实现date类型,但是提供了很好的扩展性,可以利用CLR来构造date类型。有一部分是参考了Fc的代码写的。
步骤:
1、在vs 2005中新建项目,一次选择c#——数据库——sql server项目,输入项目名称
2、选择要连接的数据库
3、在项目名称右键,添加——新建项——用户定义的类型——输入类型名称
4、代码如下:
代码如下:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedTypeFormat.UserDefined ,IsByteOrdered=true,MaxByteSize =20,ValidationMethodName="ValidateDate")]
public struct date : INullable,IBinarySerialize
{
// 私有成员
private bool m_Null;
private string m_date;
public override string ToString()
{
if (this.m_Null)
return "null";
else
{
return this.m_date;
}
}
public bool IsNull
{
get
{
return m_Null;
}
}
public static date Null
{
get
{
date h = new date();
h.m_Null = true;
return h;
}
}
public static date Parse(SqlString s)
{
if (s.IsNull || (!s.IsNull && s.Value.Equals("")))
return Null;
else
{
date u = new date();
string[] xy = s.Value.Split(" ".ToCharArray());
u.m_date = xy[0];
if (!u.ValidateDate())
throw new ArgumentException ("无效的时间");
return u;
}
}
public string _date
{
get
{
return this.m_date;
}
set
{
m_Null = true;
m_date = value;
if (!ValidateDate())
throw new ArgumentException("无效的时间");
}
}
public void Write(System.IO.BinaryWriter w)
{
byte header = (byte)(this.IsNull ? 1 : 0);
w.Write(header);
if (header == 1)
{
return;
}
w.Write(this.m_date);
}
public void Read(System.IO.BinaryReader r)
{
byte header = r.ReadByte();
if (header == 1)
{
this.m_Null = true;
return;
}
this.m_Null = false ;
this.m_date = r.ReadString();
}
private bool ValidateDate() //判断时间是否有效
{
try
{
DateTime dt = Convert.ToDateTime(m_date);
return true;
}
catch
{
return false;
}
}
}

5、按F5进行部署
6、测试:
代码如下:

CREATE TABLE tb(id int,dt dbo.Date DEFAULT CONVERT(dbo.Date,CONVERT(VARCHAR(10),GETDATE(),120)));
insert into tb(id) values(1)
SELECT id,dt=dt.ToString() FROM tb;
/*
结果:
id dt
1 2009-08-14
*/
DROP TABLE tb;

注:
1、 如果要对date类型进行日期的加减,可以调用ToString()方法输出为字符串,然后转化为datetime类型,然后再进行日期的计算。
2、 不能直接使用select * from tb 来输出dt列的值,这样输出的是一串二进制数
展开更多 50%)
分享

猜你喜欢

使用c#构造date数据类型

编程语言 网络编程
使用c#构造date数据类型

MySQL中SQL-TEXT、DATE和SET数据类型

PHP
MySQL中SQL-TEXT、DATE和SET数据类型

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC常用数据类型使用转换

编程语言 网络编程
VC常用数据类型使用转换

MySQL中的SQL TEXT DATE 和SET数据类型

编程语言 网络编程
MySQL中的SQL TEXT DATE 和SET数据类型

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C语言入门之数据类型(6)

编程语言 网络编程
C语言入门之数据类型(6)

C语言入门之数据类型(5)

编程语言 网络编程
C语言入门之数据类型(5)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Linux增加VirtualBox分辨率的方法

Linux增加VirtualBox分辨率的方法

给初学ajax的人 ajax函数代码

给初学ajax的人 ajax函数代码
下拉加载更多内容 ↓