MS-SQL2005以上的版本解决Syscolumn表中数据不能修改

例如:

在MSSQL2000里面可以获取到相应的数据

获取TrainManage表中的TrainId字段

String.Format(“Select name From Syscolumns Where id = (Select id From sysobjects Where name='{0}’) And autoval Is Not Null”, _TableName)

但是在MSSQL2005以上的版本没有该条记录的数据

解决方案:

String.Format(“Select top 1 name From Syscolumns Where id = (Select id From sysobjects Where name='{0}’) And xtype = 127 “, _TableName)

为什么要这么做呢,而不通过获取某个表的字段名字就行呢。

因为这个是common文件,其他的文件也要调用这个sql语句了

,考虑到这点。所以现在只想到这个了,其他的还没有想到,如果有更好的,希望您能分享一下,如果有错误请批评指出。

设计模式之Builder模式

Builder模式也属于一种创建模式,它主要用来产生比较复杂的对象。假如我们现在有

一个很复杂的对象,它有好多部件组成,如果我们用new在构造器中构建的话,这样

代码的耦合度很高,不能实现解耦的目的。这就要求我们将各个部件的生产和各个部

件的组装分开来做。就好比生产一台电脑,一些部门专门负责生产各种的部件(CPU,

显示卡,声卡,硬盘,显示器等),另外一些部门负责组装这些部件。就好比买个组

装电脑。要实现Builder模式,我们需要借助几个类来实现:

public abstract class Builder{

        public abstract  void  builderA();

        public abstract  void   buliderB();

        public abstract   void   buliderC();

        ………………………

        public Product  getProcuct()

              //空实现留给Director来重载

         }

}

public class  concreteBulider extends Builder {

        ClassA aA;

         ClassB  bB;

         ClassC  cC;

         public void buliderA(){

               //具体来构造部件A

         }

          public void buliderB(){ }

                //具体来构造部件B

         }

          public void buliderC(){

               //具体来构造部件C

         }

         ……………………………

 

public class Director {

         public  void constructor( Bulider bulider ){

                    bulider.builderA();

                    builder.builderB();

                    builder.builderC();

          }

          public Product  gerProduct(){

                   //把 aA,bB,cC组装为最终产品

                    return  “产品”;

           }

}

public class Client {

      public static void main(String[ ]  args){

             Builder  builder = new ConcreterBuilder(); 

             builder.contructor(builder);

             builder.getProduct();

      }

 

}

这样各个部件的生产让concreteBuilder来完成,具体的组装又Director来完成,这样代码的

耦合性就减少了。

c#word的组件时失败解决方法

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败解决方法

Application当程序运行到这句时出现下面的错误:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。3.单击”安全”选项卡,分别在”启动和激活权限”和”访问权限”组中选中”自定义”,然后 自定义->编辑->添加ASP.NET账户和IUSER_计算机名。解决方法二:如果上述方法不能解决问题,就应该是权限问题,请尝试用下面 的方法:在web.config中使用身份模拟,在<system.web>节中加入 <identity impersonate=”true” userName=”你的用户名” password=”密码”/> </system.web>

1:在服务器上安装office的word软件.

2:在”开始”- >”运行”中输入dcomcnfg.exe启动”组件服务”

3:依次双击”组件服务”- >”计算机”- >”我的电脑”- >”DCOM配置”

4:在”DCOM配置”中找到”Microsoft   word应用程序”,在它上面点击右键,然后点击”属性”,弹出”Microsoft   word应用程序属性”对话框

5:点击”标识”标签,选择”交互式用户”

6:点击”安全”标签,在”启动和激活权限”上点击”自定义”,然后点击对应的”编辑”按钮,在弹出的”安全性”对话框中填加

一个”NETWORK   SERVICE”用户(注意要选择本计算机名),并给它赋予”本地启动”和”本地激活”权限.

7:依然是”安全”标签,在”访问权限”上点击”自定义”,然后点击”编辑”,在弹出的”安全性”对话框中也填加一个”NETWORK

SERVICE”用户,然后赋予”本地访问”权限.

这样,我们便配置好了相应的word的DCOM权限.

注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户

由于word是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调用这个功能的时候再删除以前在服务器上所生成的所有word

 

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005

在CSDN上总是有网友问这个问题,自己也遇到过,因些写出来供参考:

症状:

oWordApplic = New Word.Application

当程序运行到这句时出现下面的错误:

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

oWordApplic = New Word.Application

当程序运行到这句时出现下面的错误:

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

解决方法一:

控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档

之后

单击属性打开此应用程序的属性对话框。 

2. 单击标识选项卡,然后选择交互式用户。

3.单击”安全”选项卡,分别在”启动和激活权限”和”访问权限”组中选中”自定义”,然后

自定义->编辑->添加ASP.NET账户和IUSER_计算机名

* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。

13. 确保允许每个用户访问,然后单击确定。

14. 单击确定关闭 DCOMCNFG。

解决方法二:

如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:

在web.config中使用身份模拟,在<system.web>节中加入   <identity impersonate=”true” userName=”你的用户名” password=”密码”/>

</system.web>

asp.netc#对GridView编辑,删除,更新,取消的操作

GridView添加了编辑,删除,管理列后的操作

//编辑
protected void gvwOne_RowEditing(object sender, GridViewEditEventArgs e)
{
	gvwOne.EditIndex = e.NewEditIndex;
	gvwBand();//绑定
}
//更新
protected void gvwOne_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
	String strOne = gvwOne.Rows[e.RowIndex].Cells[0].Text.Trim();

	访问数据库等代码...

	Response.Write("<script language:javascript>javascript:window:alert('修改成功');</script>");

	gvwOne.EditIndex = -1;
	gvwBand();//绑定数据
}
//取消
protected void gvwOne_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
	gvwOne.EditIndex = -1;
	gvwBand();//绑定
}
//删除
protected void gvwOne_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
	String strOne = gvwOne.Rows[e.RowIndex].Cells[0].Text.Trim();

	访问数据库等操作...

	Response.Write("<script language:javascript>javascript:window:alert('删除成功');</script>");
	
	gvwBand();//绑定
}

//删除时弹出提示框
protected void gvwOne_RowDataBound(object sender, GridViewRowEventArgs e)
{
	//如果是绑定数据行
	if (e.Row.RowType == DataControlRowType.DataRow)
	{
		if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
		{
				((LinkButton)e.Row.Cells[17].Controls[2]).Attributes.Add("onclick", "javascript:return confirm('你确认要删除:\"" + e.Row.Cells[1].Text + "\"吗 ')");//Cells[17]代表删除所在列索引,Controls[2]表示按下第三个汉字才弹出提示
		}
	}
//---------------鼠标经过行变色------------------
	int i;
	//执行循环,保证每条数据都可以更新
	for (i = -1; i < gvwOne.Rows.Count; i++)
	{
		//首先判断是否是数据行
		if (e.Row.RowType == DataControlRowType.DataRow)
		{
			//当鼠标停留时更改背景色
			e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='red'");
			//当鼠标移开时还原背景色
			e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c");
		}
	}
//---------------鼠标经过行变色------------------
}

黑色头发:http://heisetoufa.iteye.com/

asp.net中模拟测试smtp发信

在asp.net 中,有时要测试发信SMTP,但如果在单元测试中,如果没方便好用的

smtp怎么办,其实还是有办法模拟的,下面讲解下:

在web.config 中设置

<system.net>

  <mailSettings>  

   <smtp deliveryMethod=”SpecifiedPickupDirectory”>          <specifiedPickupDirectory pickupDirectoryLocation=”C:\Mail\”/>      </smtp>

  </mailSettings>

</system.net>

这样设置的话,将指定c:\mail为指定的收件箱的目录了,

代码可以编写如下:

protected void btnMail_Click(object sender, EventArgs e){    MailMessage message = new MailMessage(“abc@somedomain.com”,”abc@abcdefgh.com”,Newsletter”, “This is a test mail”);  

SmtpClient client = new SmtpClient(“localhost”);  

client.Send(message);}

}

这样的话,会发现运行后,在c:\mail下会有SMTP格式的你发的信了.

这个测试方法其实是很有用的,因为有时要涉及到用SMTP的一些信息交换平台的报文,

用这个测试方法就很好,可以清楚看到报文头和报文主体的内容呢

DataTime.Ticks

java Date.getTime()

getTime
public long getTime()

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

返回: 自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数。

.net DateTime.Ticks

public long Ticks {get;}
   
 属性值

表示此实例的日期和时间的刻度数。该值介于 MinValueMaxValue 之间。

备注

此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。

好了一个返回的是毫秒一个返回的是微秒,所以知道毫秒与微妙之间的转化也是有必要的

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns)
1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps)

1 毫秒 = 10^-3 秒, ——->10的-3次方 小数点从1开始向左移3位即0.001
1 微秒 = 10^-6 秒,
1 毫微秒 = 10^-9 秒,
100 毫微秒 = 10^-7 秒。

Console.WriteLine(DateTime.Now.Ticks); // 输出:633603924670937500

也就是说,从0001 年 1 月 1 日午夜 12:00:00 以来到现在已经过了  633603924670937500 * 10^-7 秒。

很少用,除非需要很精确地知道从那时(1年1月1日)开始过了多少时间。

比如精确地计算两个时间差时(想知道某段程序运行了多少毫微秒)就可以用到。

using System;
using System.Collections.Generic;

class Sentence
{
  static void Main()
  {
    long ticks0 = DateTime.Now.Ticks;
    for (int i = 0; i < int.MaxValue; i++)
    {
      // ...
    }
    long ticks1 = DateTime.Now.Ticks;
    long n = (ticks1 - ticks0) * 100;
    Console.WriteLine("上面这段程序运行了{0}毫微秒", n);
  }
}

 

转换成比用毫微秒更直观些:

 

using System;
using System.Collections.Generic;

class Sentence
{
  static void Main()
  {
    long ticks0 = DateTime.Now.Ticks;
    for (int i = 0; i < int.MaxValue; i++)
    {
      // ...
    }
    long ticks1 = DateTime.Now.Ticks;
    double n = (ticks1 - ticks0) / 10000000.0;
    Console.WriteLine("上面这段程序运行了{0}秒", n);
  }
}

 

 

 

获取高精度的时间差,可以用来分析页面运行时间的长短

DateTime.Now的精度是很低,这个低的意思是,两次获取的DateTime.Now的Ticks的差,只是一个较大数的整数倍。例如在我的机器上,这个差最小是10.114ms。所以,如果我用DateTime.Now来计算时间差,那么就无法精确到10ms以内。

后来发现ASP.NET的TRACE的精度很高,用Reflector看它的实现,发现了它是使用这两个方法的:

参考MSDN:How To: Time Managed Code Using QueryPerformanceCounter and QueryPerformanceFrequency

我自己了按照这个写了个类,代码如下:

 

using System;
using System.Runtime.InteropServices;
public class A
{
    [DllImport("kernel32.dll")]
    static extern bool QueryPerformanceCounter([In, Out] ref long lpPerformanceCount);
    [DllImport("kernel32.dll")]
    static extern bool QueryPerformanceFrequency([In, Out] ref long lpFrequency);

    static long _f = 0;

    static public long GetTickCount()
    {
        long f = _f;

        if (f == 0)
        {
            if (QueryPerformanceFrequency(ref f))
            {
                _f = f;
            }
            else
            {
                _f = -1;
            }
        }
        if (f == -1)
        {
            return Environment.TickCount * 10000;
        }
        long c = 0;
        QueryPerformanceCounter(ref c);
        return (long)(((double)c) * 1000 * 10000 / ((double)f));
    }

    //GetTickCount()为0时的DateTime.Ticks值
    static long _tc = 0;

    //这个返回的不是真正的精确时间,但时间与时间的差是精确的。
    //GetExactNow与DateTime.Now的偏差比DateTime.Now的精度还要小,所以该偏差
    static public DateTime GetExactNow()
    {
        if (_tc == 0)
        {
            long tc = GetTickCount();
            DateTime dt = DateTime.Now;
            _tc = dt.Ticks - tc;
            return dt;
        }

        return new DateTime(_tc + GetTickCount());
    }
}

 

 

在ASP。NET的应用,可以在Global.asax的Application_BeginRequest事件中加入代码来纪录程序开始时的TickCount:

Context.Items[“BeginRequestTickCount”]=A.GetTickCount();

然后在页面输出的后面:

<html>….
<div align=”center”>
<%=new TimeSpan(A.GetTickCount()-(long)Context.Items[“BeginRequestTickCount”]).TotalMilliseconds%>
</div>
</body></html>

 

这样就可以达到获取页面运行时间值了。(当然输出TotalMilliseconds后Asp.Net还要一些后期工作的,不过这个时间应该只需要0.n ms)

 

1秒=1000000000毫微秒   10亿

1秒=1000000000毫微秒
1秒=1000000000毫微秒(10亿分之一秒)
1秒=1000豪秒
1毫秒=1000微秒
1微秒=1000毫微秒
所以1秒=1000*1000*1000=1000000000毫微秒
1秒=1000豪秒
1毫秒=1000微秒
1微秒=1000毫微秒
1毫微秒=1纳秒
1纳秒=10埃秒
1秒   =   1000   毫秒
        =   1000000   微秒
        =   1000000000   毫微秒
        =   1000000000   纳秒
        =   1000000000000   皮秒

1s   =   1000   ms
      =   1000000   us
      =   1000000000   ns
      =   1000000000000   ps

1(秒)=10的9次方(毫微秒)

<!–End_rbody_41637559//–>

<!–End_rbody_41637167//–>

.TextBloggingEngine

<iframe align=”top” marginwidth=”0″ marginheight=”0″ src=”http://www.zealware.com/csdnblog01.html” frameborder=”0″ width=”728″ scrolling=”no” height=”90″></iframe>

<!– Displays the workspace logo in the overview panel. –>

Current status Beta
Created date 07/27/2003
Audience Advanced
License View license
Language C#
Technology ASP.NET, Web services
Access Public

.Text is a powerful blogging engine that is used to host hundreds of blogs. The application is an example of an N-tiered application. It can be used to host 1 to X number of blogs using a single IIS application. The application is written entirely in C#/ASP.NET and was built using VS.NET 1.1.

Download latest release from GotDotNet WorkSpace

Trackback: http://tb.blog.csdn.net/TrackBack.aspx PostId=114151

紧跟随数据库、C#、以致软工(二)

偶自己也不知道居然觉得看着FX大的东东好有趣,于是就跟着继续……今天一天算完了- -

上次突然说改用FLEX2B了,不单单是作者本人,偶当然是更加痛苦不勘啊~不过还是赶紧挂了FLEX下来再说,幸运的是随后FX大在BLOG后面补上了回复,这样虽然偶DUMMY了一些,总算准备工作就绪了………………

第一次用FLEX其实很久了,没想到现在样子变了不少,嗯,和ECLIPSE一样,|||++++于是立即发现内存占用掉了200M左右,再开一个VC就……话说现在明白了为啥不能够再开QQ和MSN了……吃不消啊……



内存好紧张啊……

想先作最简单的就导入数据库,SQL以前用过2000基本概念稍微有点,之后重新编译了一下……说起来一开始就运行异常了…………果然没有顺利的东西啊(话说FX大更新了一下?但是偶这边的代码还是旧的,于是还是EVENTARGS不能……)



不过老实说这个异常出乎意料的好,居然是一个THROW的地方有一个对话框跳出来说XXX有问题……感动啊,怎么说MS的东西就是很体贴……现在有点羡慕ASP.NET的程序员了,偶是看到错误就烦恼了,这个说不定哪里就溢出了呢……

瞎折腾了一番,倒是把一些数据库的操作看了看了……于是总算能够连上了,出现过(1)访问冲突,不知道哪里已经开了一个链接…… (2) 数据库不存在,可能是退回去的时候挂掉了罢,删了没有补上,反正最后就全部重新来了一次……另外ASP.NET一下子不知道怎么去使用,FX大也没有提到VS2005是开了几个,推断是一起的……偶得开C#和ASP.NET两个……于是还好后面还是可以运行的……

连上以后基本都KO了,不过IIS出现了问题,提示是:ASP.NET Error: Failed to access IIS metabase 看来是权限的问题?找到了:这个BLOG,照着做呗……算是启动ASP.NET的IIS了^^



命令提示符如下:



多了一个ASP的……之后还是不行提示是没有办法打开数据库,看来只是数据库出现前面的问题了,重新导入一次罢(还是没有清楚为什么数据会消失?是不是不能够随便改变数据的位置呢?),之后的错误是没有权限,应该是添加读取的权限,





之后 哇,总算KO了……选择1 2都可以显示字符了(天,弄了这么久)留下一个问题,是不是所有来访问的机器都是用这个默认的ASPNET的账户呢?

想了不如继续FX的FLEX+webService,反正都装了,结果一跑来这个问题(端口是改了啊)说是找不到mx:webService,



Could not resolve <mx:webService> to a component <mx:webService>implementation.傻眼了,明显没有出错啊,但是就是说没有这个支持……随后查了,基本没有人有这个问题,只有一个JP的网站还有一点点……不过看不懂啊,而且应该不是……于是发现这个东西有好多的配置(仔细看了,第一个就是基本的支持WEBSERVICE的工程,开始的时候肯定迷糊了……),难道工程搞错了……果然,结果发现页面就可以显示了(之前是一个很大的X)

但是按钮点了还是没有反应,是不是WEBSERVICE启动问题?应该没有啊……最后发现直接开了SERVICE直接会显示文件的列表,是不是应该改下?偶就简单的把SERVICE那段注释的撤销了,于是看到启动了一个提示方法可用,看来有戏XD

再看看FX的那篇BLOG,哦肯定是偶的位置不对,因为偶中间还有一个WebServ1这个路径,添加以后总算能够正确显示了TOT





不过怎样在浏览器下面看不知道,因为MXML又不是HTML,难道要FLASH吗?偶都没有装FLASH PLAYER 9呢……好像装了,反正直接打开是XML类似的页面……

那么应该怎么导出来看啊……不过据说这些以后都是浏览器的标准,总之还是慢慢看FX大的演示好了,XD

还有那个是怎么用的?因为ASP.NET已经启动了,MS的那个工具就没有用到了……

留着:

转眼就是半夜了,今天没想到什么都没有做了啊~~~



codebehind出处呢……

ASP.NET设置数据格式与String.Format使用总结

{0:d}YY-MM-DD

{0:p}百分比00.00%

{0:N2}12.68

{0:N0}13

{0:c2}$12.68

{0:d}3/23/2003

{0:T}12:00:00AM

{0:男;;女}

DataGrid-数据格式设置表达式

数据格式设置表达式

.NETFramework格式设置表达式,它在数据显示在列中之前先应用于数据。此表达式由可选静态文本和用以下格式表示的格式说明符组成:

{0:formatspecifier}

零是参数索引,它指示列中要格式化的数据元素;因此,通常用零来指示第一个(且唯一的)元素。formatspecifier前面有一个冒号(:),它由一个或多个字母组成,指示如何格式化数据。可以使用的格式说明符取决于要格式化的数据类型:日期、数字或其他类型。下表显示了不同数据类型的格式设置表达式的示例。有关格式设置表达式的更多信息,请参见格式化类型。

格式设置表达式

应用于此数据类型

说明

Price:{0:C}

numeric/decimal

显示“Price:”,后跟以货币格式表示的数字。货币格式取决于通过Page指令或Web.config文件中的区域性属性指定的区域性设置。

{0:D4}

integer(不能和小数一起使用。)

在由零填充的四个字符宽的字段中显示整数。

{0:N2}%

numeric

显示精确到小数点后两位的数字,后跟“%”。

{0:000.0}

numeric/decimal

四舍五入到小数点后一位的数字。不到三位的数字用零填充。

{0:D}

date/datetime

长日期格式(“Thursday,August06,1996”)。日期格式取决于页或Web.config文件的区域性设置。

{0:d}

date/datetime

短日期格式(“12/31/99”)。

{0:yy-MM-dd}

date/datetime

用数字的年-月-日表示的日期(96-08-06)。

只读

当此列处于编辑模式时,该列中的数据是否显示在可编辑的控件中。

2006-02-22|asp.net数据格式的Format–DataFormatString

我们在呈现数据的时候,不要将未经修饰过的数据呈现给使用者。例如金额一万元,如果我们直接显示「10000」,可能会导致使用者看成一千或十万,造成使用者阅读数据上的困扰。若我们将一万元润饰后输出为「NT$10,000」,不但让使比较好阅读,也会让使用者减少犯错的机会。
下列画面为润饰过的结果:
上述数据除了将DataGridWeb控件以颜色来区隔记录外,最主要将日期、单价以及小计这三个计字段的数据修饰的更容易阅读。要修饰字段的输出,只要设定字段的DataFormatString属性即可;其使用语法如下:

DataFormatString=”{0:格式字符串}”

我们知道在DataFormatString中的{0}表示数据本身,而在冒号后面的格式字符串代表所们希望数据显示的格式;另外在指定的格式符号后可以指定小数所要显示的位数。例如原来的数据为「12.34」,若格式设定为{0:N1},则输出为「12.3」。其常用的数值格式如下表所示:

格式字符串资料结果
“{0:C}”12345.6789$12,345.68
“{0:C}”-12345.6789($12,345.68)
“{0:D}”1234512345
“{0:D8}”1234500012345
“{0:E}”12345.67891234568E+004
“{0:E10}”12345.67891.2345678900E+004
“{0:F}”12345.678912345.68
“{0:F0}”12345.678912346
“{0:G}”12345.678912345.6789
“{0:G7}”1234567891.234568E8
“{0:N}”12345.678912,345.68
“{0:N4}”123456789123,456,789.0000
“Total:{0:C}”12345.6789Total:$12345.68

其常用的日期格式如下表所示:

格式说明输出格式
d精简日期格式MM/dd/yyyy
D详细日期格式dddd,MMMMdd,yyyy
f完整格式(longdate+shorttime)dddd,MMMMdd,yyyyHH:mm
F
完整日期时间格式
(longdate+longtime)
dddd,MMMMdd,yyyyHH:mm:ss
g一般格式(shortdate+shorttime)MM/dd/yyyyHH:mm
G一般格式(shortdate+longtime)MM/dd/yyyyHH:mm:ss
m,M月日格式MMMMdd
s适中日期时间格式yyyy-MM-ddHH:mm:ss
t精简时间格式HH:mm
T详细时间格式HH:mm:ss

string.format格式结果

String.Format

(C)Currency:……..($123.00)

(D)Decimal:………-123

(E)Scientific:…….-1.234500E+002

(F)Fixedpoint:…….-123.45

(G)General:………-123

(N)Number:………-123.00

(P)Percent:………-12,345.00%

(R)Round-trip:…….-123.45

(X)Hexadecimal:…….FFFFFF85

(d)Shortdate:…….6/26/2004

(D)Longdate:……..Saturday,June26,2004

(t)Shorttime:…….8:11PM

(T)Longtime:……..8:11:04PM

(f)Fulldate/shorttime:..Saturday,June26,20048:11PM

(F)Fulldate/longtime:…Saturday,June26,20048:11:04PM

(g)Generaldate/shorttime:.6/26/20048:11PM

(G)Generaldate/longtime:.6/26/20048:11:04PM

(M)Month:……….June26

(R)RFC1123:………Sat,26Jun200420:11:04GMT

(s)Sortable:……..2004-06-26T20:11:04

(u)Universalsortable:…2004-06-2620:11:04Z(invariant)

(U)Universalsortable:…Sunday,June27,20043:11:04AM

(Y)Year:……….June,2004

(G)General:………Green

(F)Flags:……….Green(flagsorinteger)

(D)Decimalnumber:…..3

(X)Hexadecimal:…….00000003

说明:
String.Format
将指定的String中的每个格式项替换为相应对象的值的文本等效项。

例子:

intiVisit=100;
stringszName=”Jackfled”;
Response.Write(String.Format(“您的帐号是:{0}。访问了{1}次.”,szName,iVisit));