使用c#构造date数据类型 |
本文标签: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列的值,这样输出的是一串二进制数 |