/*** 作者:trieagle(让你望见影子的墙) 日期:2009.8.14 注: 转载请保留此信息 ****/ 使用c#构造date数据类型 在sql server2005没有实现date类型,但是提供了很好的扩展性,可以利用CLR来构造date类型。有一部分是参考了Fc的代码写的。 步骤: 1、在vs 2005中新建项目,一次选择c#——>>数据库——>>sql server项目,输入项目名称 2、选择要连接的数据库 3、在项目名称右键,添加——>>新建项——>>用户定义的类型——>>输入类型名称 4、代码如下: <div class="codetitle"><a style="CURSOR: pointer" data="40067" class="copybut" id="copybut40067" onclick="doCopy('code40067')"> 代码如下:<div class="codebody" id="code40067"> 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、测试: <div class="codetitle"><a style="CURSOR: pointer" data="31781" class="copybut" id="copybut31781" onclick="doCopy('code31781')"> 代码如下:<div class="codebody" id="code31781"> 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列的值,这样输出的是一串二进制数 (编辑:甘南站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|