2008年8月21日星期四

SQL Server 日期函数使用大全

--转换日期不同的输出格式
print convert(varchar(10),getdate(),100)--默认格式 mon dd yyyy hh:miAM(或 PM)
print convert(varchar(10),getdate(),101)--美国标准 mm/dd/yyyy
print convert(varchar(10),getdate(),102)--ANSI yy.mm.dd
print convert(varchar(10),getdate(),103)--英国/法国 dd/mm/yy
print convert(varchar(10),getdate(),104)--德国 dd.mm.yy
print convert(varchar(10),getdate(),105)--意大利 dd-mm-yy
print convert(varchar(10),getdate(),110)--美国 mm-dd-yy
print convert(varchar(10),getdate(),111)--日本 yy/mm/dd
print convert(varchar(10),getdate(),112)--ISO yymmdd
print convert(varchar(10),getdate(),121)-- yyyy-mm-dd

--一周的第一天 美国英语中默认 7 对应星期日。
select @@DATEFIRST

--一个月的第一天 DATEDIFF 返回两个指定日期之间所跨的日期和时间边界的数目
select dateadd(mm,datediff(mm,0,getdate()),0)

--本周的星期一
select dateadd(wk,datediff(wk,0,getdate()),0)

--一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
select cast((cast(year(getdate()) as varchar)+'-01-01') as datetime)

--季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

--当天的零时
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
select cast(convert(varchar(10),getdate(),121) as datetime)

--上个月的最后一天 :本月第一天减10ms.
SELECT dateadd(ms,-10,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

--本月的最后一天
select dateadd(dd,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

--显示星期几
select datename(weekday,getdate())

--如何取得某个月的天数
SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))

--判断是否闰年
SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))))
when 28 then '平年' else '闰年' end

--当前季度有多少天
declare @m tinyint,@time smalldatetime
select @m=month(getdate())
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01'
select datediff(day,@time,dateadd(mm,3,@time))

2008年8月13日星期三

如何打开.csproj项目文件


不知道为什么Visual Studio 2005的sp1要创建出.csproj格式的项目文件,难道就是为了让每个人都打上sp1的补丁,最讨厌的是Microsoft Visual Studio 2008竟然也不认这种格式的项目文件,难道是vs.net 2005的sp1比vs.net 2008产品开发的时间较晚,还是两个产品不是同一个产品组开发出来的。摸索了半天找到了解决方法,其实很简单,就是用vs2008去强制打开.csproj的文件。
点击.csproj项目文件,右键选择打开方式,点击浏览,找到vs2008的默认安装目录的运行程序:E:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe,点击确定后会弹出转换选择对话框(如下图),选择下一步或者完成,转换后就可以打开了……

2008年8月11日星期一

.Net实现Post方式数据传输

这两天帮一个朋友实现一个短信交互的网站,要跟sp进行接口数据交换,接口实现方式是Post,我们提供数据接收,实现功能后自己也写了一段POST程序进行了一下测试,代码如下:
首先是发送数据

string strParm = "传输的XML字符串";
Encoding encode = System.Text.Encoding.Default;

byte[] arrB = encode.GetBytes(strParm);

HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://localhost:34738/MOPage.aspx");
myReq.Method = "POST";
myReq.ContentType = "application/x-www-form-urlencoded";
myReq.ContentLength = arrB.Length;
Stream outStream = myReq.GetRequestStream();
outStream.Write(arrB, 0, arrB.Length);
outStream.Close();
WebResponse myResp = null;
try
{
//接收HTTP做出的响应
myResp = myReq.GetResponse();
}
catch (Exception ex)
{
throw ex;
}
Stream ReceiveStream = myResp.GetResponseStream();
StreamReader readStream = new StreamReader(ReceiveStream, encode);
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
string str = null;
while (count > 0)
{
str += new String(read, 0, count);
count = readStream.Read(read, 0, 256);
}
readStream.Close();
myResp.Close();
Response.Write(str);


下边代码实现接收数据功能


由于数据编码格式采用的GBK,接口使用asp.net技术实现,所以接收端采用GB2312格式转换数据流,接收数据并转换为xml实体对象存储
string ReqToWrite = string.Empty;
try
{
byte[] ReqData = Request.BinaryRead(Request.ContentLength);//得到请求的数据
//string ReqQuery = System.Text.UnicodeEncoding.UTF8.GetString(ReqData, 0, ReqData.Length);
string ReqQuery = System.Text.Encoding.GetEncoding("GB2312").GetString(ReqData, 0, ReqData.Length);
ReqQuery = ReqQuery.Replace("\r\n", "");
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(ReqQuery);
XmlElement root = xmlDoc.DocumentElement;
XmlNodeList nodeList = root.SelectNodes("/message");
int i=0;
foreach (XmlNode node in nodeList)
{
string linkid, spid, spcode, feecode, feeprice, toicp, product, feecategory, channel, mobile, content, isprovision, issubscribe, createDate;
linkid = node.SelectSingleNode("linkid").InnerText.Trim();
spid = node.SelectSingleNode("spid").InnerText.Trim();
spcode = node.SelectSingleNode("spcode").InnerText.Trim();
feecode = node.SelectSingleNode("feecode").InnerText.Trim();
feeprice = node.SelectSingleNode("feeprice").InnerText.Trim();
toicp = node.SelectSingleNode("toicp").InnerText.Trim();
product = node.SelectSingleNode("product").InnerText.Trim();
feecategory = node.SelectSingleNode("feecategory").InnerText.Trim();
channel = node.SelectSingleNode("channel").InnerText.Trim();
mobile = node.SelectSingleNode("mobile").InnerText.Trim();
content = node.SelectSingleNode("content").InnerText.Trim();
isprovision = node.SelectSingleNode("isprovision").InnerText.Trim();
issubscribe = node.SelectSingleNode("issubscribe").InnerText.Trim();
createDate = node.SelectSingleNode("createDate").InnerText.Trim();
i=InterfaceAccess.InsertMOInfo(linkid, spid, spcode, feecode, Convert.ToInt32(feeprice), toicp, product, feecategory,
channel, mobile, content, isprovision, issubscribe, Convert.ToDateTime(createDate), ReqQuery);
}
ReqToWrite = i.ToString();
}
catch (Exception ex)
{
// ....
}
finally
{
Response.Write(ReqToWrite);
Response.End();
}

以上程序分别需要的命名空间引用如下:
using System.Net;
using System.IO;
using System.Text;
using System.Xml;
有一点需要要注意ASP.NET中为了防止注入攻击,对"<"等字符进行了限制,所以要在被请求的ASPX页面中,将 Page指令中的ValidateRequest 设置"false"

2008年8月1日星期五

vmware server 2.0 RC1 安装过程中的问题

今天我的机器上那个vmware 6.5过期了,下载了一个vmware server 2.0尝试安装,我的机器是windows 2003 sp2 ,安装时遇到了很大问题,出现下边的错误:

Product: VMware Server -- Error 2755. Server returned unexpected error 1625 attempting to install package C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\{AF08C71F-F822-4416-87A9-2BBF5A8A5F12}~setup\VMware Server.msi.
折腾了半天终于终于找到了解决的方法:
1.直接打开控制面板的管理工具。(或者单击“开始”,单击“运行”,键入 control admintools,然后单击“确定”。)
2.双击“本地安全策略”。
3.单击“软件限制策略”。注意:如果未列出软件限制,请右击“软件限制策略”,然后单击“新建策略”。
4.在“对象类型”下,双击“强制”。
5.单击“除本地管理员以外的所有用户”,然后单击“确定”。
6.重新启动计算机。
wmware server 2.0采用基于apache的web方式进行管理操作,集成了证书认证模式的信任机制,感觉功能较server1的版本有很大改进和提高,但对于我来说安装了太多我不需要的东西,感受几十分钟后毫不犹豫的卸载了^_^