| 
                         /***  作者: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列的值,这样输出的是一串二进制数                         (编辑:甘南站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |