使用c#构造date数据类型
发布时间:2024-01-15 22:19:15
标签:c#,date,数据类型
/***********************************
作者: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列的值,这样输出的是一串二进制数
0
投稿
猜你喜欢
- 支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码:有时候我们仅仅只想要图片中间的方
- floor()方法返回不大于x的最大整数(向下取整)。语法以下是floor()方法的语法:import mathmath.flo
- 今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来。启动 mitmproxy首先我
- 简介:单例模式可以保证一个类仅有一个实例,并提供一个访问它的全局访问点。适用性于当类只能有一个实例而且客户可以从一个众所周知的访问点访问它,
- 作为一名前端,我们通常要做的就是让页面在各系统A-Grade浏览器,甚至网站浏览份额0.1%以上的浏览器上良好显示。当然,还有性能问题。不过
- 一、问题分析runtimeError: package fails to pass a sanity check解决方法如下:解决一:使用p
- PyCaret 是一个开源、低代码的 Python 机器学习库,可自动执行机器学习工作流。它是一种端到端的机器学习和模型管理工具,可以以指数
- 问题描述:在pyhton脚本中logging.info("hello world")希望输出'hello wor
- 开发背景:每次项目都要写数据库、烦死了。。然后就每次数据库都要花很多时间。烦死了!不如写个通用的增删查改,以不变应万变!特性:搭建通用增删查
- 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样。break最常见的用途是当一些外
- 环境系统: Mac 工具: Alfred, git, homebrew, pngpaste. 语言: perl 其他: Gitee工具下载g
- 一、Sql Server中的日期与时间函数 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加
- 由于python多线程无法发挥多核的作用,因此当计算量很大的时候就需要考虑多进程。只不过多进程比较麻烦一些,进程中通信向来是一件麻烦事。py
- 密码与通信密码技术是一门历史悠久的技术。信息传播离不开加密与解密。密码技术的用途主要源于两个方面,加密/解密和签名/验签在信息传播中,通常有
- 微软在今天早上发布新的安全通告证实,一处远程执行代码漏洞影响到了整个SQL Server产品线。该漏洞的入侵代码在两周前已经被公布在互联网上
- /* 小弟刚刚接触ORACLE存储过程,有一个问题向各位同行求教,小弟写了一个存储过程,其目的是接收一个参数作为表名,然后查询该表中的全部记
- 首先看一下目标的验证形态是什么样子的是一种通过验证推理的验证方式,用来防人机破解的确是很有效果,但是,But,这里面已经会有一些破绽,比如:
- 列表的创建创建列表,Python底层只提供了唯一一个Python/C API,也就是PyList_New。这个函数接收一个size参数,允许
- smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置一下。outlook发送就是Python直接调用win32方式。调用程序
- (注:在看到大家如此关注JS里头的这几个对象,我试着把原文再修改一下,力求能再详细的阐明个中意义 2007-05-21)在提到上述的概念之前