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

MSSQL
mssql server 存储过程里,bulk insert table from ''路径+文件'',路径固定,文件名不固定的实现方法
请问在mssql“SQL事件探查器”里表格的标题,如CPU,Read,Write,Duration,SPID.........的解释
mssql server .ldf和.mdf的文件附加数据库的sql语句
[js]javascript与剪贴板交互
mssql中得到当天数据的语句
在SQL中使用convert函数进行日期的查询的代码
sql server中datetime字段去除时间的语句
sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
推荐SQL Server 重新恢复自动编号列的序号的sql代码
清空MSSQL日志 与set recovery simple
mssql2005注入方法小结
[原创]比较详细的完美解决安装sql2000时出现以前的某个程序安装已在安装计算机上创建挂起的文件操作。
sql语句中如何将datetime格式的日期转换为yy-mm-dd格式
重装MS SQL Server 2000前必须彻底删除原安装文件的方法
SQL Server 不删除信息重新恢复自动编号列的序号的方法
MSSQL差异备份取系统权限的相关软件下载
解决MSSQL2005远程连接sql2000非默认端口数据库的问题
SQL命令大全-中英文对照
用SQL语句实现随机查询数据并不显示错误数据的方法
sql server不存在 sql server拒绝访问

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 60 ::
收藏到网摘: 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列的值,这样输出的是一串二进制数