/ ***********************************
作者:trieagle(让你看到阴影的墙)
日期:2009.8.14
注:转载请保留此信息
************************************ /
用C #构造数据类型
日期类型不在SQL Server2005实现,但它提供了很好的扩展性,和CLR可以用来构造数据类型,其中有些是写在参考FC的代码。
步:
1,在VS 2005中新的项目,一个选择C # - > > > >数据库SQL Server项目,输入项目的名称
2。选择要连接的数据库
三.在项目名上添加右键,添加新建项目>用户定义类型>输入类型名称
4。代码如下:
复制代码代码如下所示:
使用系统;
使用系统数据;
使用system.data.sqlclient;
使用system.data.sqltypes;
使用microsoft.sqlserver.server;
{化}
{ microsoft.sqlserver.server.sqluserdefinedtypeformat.userdefined,isbyteordered = true,MaxByteSize = 20,validationmethodname =validatedate )}
公共结构日期:inullable,IBinarySerialize
{
/私有成员
私人布尔m_null;
m_date字符串;
公共覆盖的字符串()
{
如果(这。m_null)
返回null;
其他的
{
返回this.m_date;
}
}
市民bool IsNull
{
得到
{
返回m_null;
}
}
公共静态日期无效
{
得到
{
日期=新日期();
h.m_null =真;
返回H;
}
}
公共静态数据解析(sqlstring S)
{
如果(s.isnull | |(s.value.equals(s.isnull!
返回null;
其他的
{
日期=新日期();
字符串{} XY = s.value.split(。ToCharArray());
u.m_date = XY { 0 };
如果(!u.validatedate())
抛出ArgumentException(无效的时间);
还你;
}
}
_date字符串
{
得到
{
返回this.m_date;
}
集
{
m_null =真;
m_date =价值;
如果(!ValidateDate())
抛出ArgumentException(无效的时间);
}
}
public void写(system.io.binarywriter W)
{
字节(byte)(this.isnull头= 1:0);
写(头);
如果(头= 1)
{
返回;
}
w(这。m_date);
}
公共无效阅读(system.io.binaryreader R)
{
字节的头= r.readbyte();
如果(头= 1)
{
this.m_null =真;
返回;
}
this.m_null = false;
this.m_date = r.readstring();
}
私人bool(validatedate) /时间来判断是否有效
{
尝试
{
DateTime DT = convert.todatetime(m_date);
返回true;
}
抓住
{
返回false;
}
}
}

5。按F5部署
6。测试:
复制代码代码如下所示:
创建测试表(ID int,DT dbo。日期默认转换(dbo.date,转换(varchar(10),(120),)))))
插入TB(id)值(1)
选择ID,DT = dt.tostring()结核病;
*
结果uff1a
我DT
1 2009-08-14
* /
删除表结核;

注:
1、如果你想添加或减去日期型日期,你可以叫ToString()方法把它输出到一个字符串,然后转换为DateTime类型,然后计算日期。
2,不能直接使用TB中的select *来输出dt列的值,因此输出是二进制数的字符串。