当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 使用c#构造date数据类型

MSSQL
SQL Server中选出指定范围行的SQL语句写法
Microsoft SQL Server 2000安装问题集锦
修改SQL Server 2005 sa用户密码的方法
SQL Server数据库查询优化的常用方法总结
两种与SQL Server数据库交换数据的方法
Sun正式发布MySQL 5.1版 简化数据库应用
使用SQL Server 2008中对象相关性
SQL注入防御:用三种策略应对SQL注入攻击
SQL Server 2005 SP3正式版
MySQL数据库中使用GRANT语句增添新用户
讲解数据库加密技术的功能特性与实现方法
如何在SQL Server数据库中加密数据
30步检查SQL Server安全列表
在SQL Server数据库开发中的十大问题
向外扩展SQL Server 实现更高扩展性
SQL Server 2005 五个动态管理对象
从算法入手讲解SQL Server的典型示例
如何解决SQLServer占内存过多的问题
SQL指令植入式攻击的危害及其防范措施
SQL游标原理和使用方法

MSSQL 中的 使用c#构造date数据类型


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 139 ::
收藏到网摘: n/a

在sql server2005没有实现date类型,但是提供了很好的扩展性,可以利用CLR来构造date类型。有一部分是参考了Fc的代码写的。 /***********************************
作者: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列的值,这样输出的是一串二进制数