诚然åQŒç›®å‰ä¹Ÿæœ‰ä¸ž®‘第三方的控ä»Óž¼Œå¦‚Xceed Ultimate Suiteã€ComponentOne.Studioã€Infragistics.NetAdvantage½{‰ç‰åQŒä‹É用这些控件大多需è¦å†èŠ×ƒ¸€å®šæ—¶é—´åŽ»æŽŒæ¡˜q™äº›æŽ§äšg的用法,而且有些åšå¾—䏿˜¯å¾ˆå¥½åQŒæˆ‘曄¡»è§è¿‡ä¸€ä¸ªå•†ä¸šæŽ§ä»‰™‡Œé¢å¾ˆå¤šæ˜¯ç”Õd‡ºæ¥çš„åQŒä¸èƒ½åƒVS.net自带的控仉™‚£æ ·åœ¨IDE上絋zÀLާåˆÓž¼ŒçŽ°åœ¨¾l™å¤§å®¶å±•½CÞZ¸€ä¸ªå¾ˆ½Ž€å•çš„æ¢çš®è‚¤æŽ§ä»Óž¼Œå…ˆä¸è¯´åˆ«çš„,让大家看看效果:
看到上é¢çš„界é¢å¿ƒåŠ¨äº†å—?告诉大家åQŒæˆ‘用的都是VS2005çš„æ ‡å‡†æŽ§ä»Óž¼Œå®žçްæ¢çš®è‚¤çš„功能也仅仅是数行代ç 而已åQŒä¹Ÿž®±æ˜¯è¯´ä»¥å‰ç†Ÿæ‚‰çš„æŽ§äšg˜q˜ç…§å¸æ€‹É用ã€?/p>
先介¾l一下这套控件å§åQŒè¿™å¥—控件仅有一个dllåQˆIrisSkin2.dllåQ‰æ–‡ä»¶å’Œä¸€ä¸ªskinæ–‡äšg夹,skinæ–‡äšg夹下共有22ä¸ªåæ–‡äšg夹,æ¯ä¸ªå文件夹其实ž®±æ˜¯ä¸€å¥—界é¢é£Žæ û|¼Œä¹Ÿå°±æ˜¯è¯´æˆ‘们å¯ä»¥ä½¿ç”¨22¿Uä¸åŒé£Žæ ¹{€?/p>
实现¾l™ç•Œé¢æ¢çš®è‚¤æœ‰ä¸¤¿Uåšæ³•:åQˆä¸€åQ‰æ‹·è´æ³•åQŒå³ä½¿å°†ç•Œé¢èµ„æºå¤¹ä¸‹æ‰€æœ‰çš„æ–‡äšg拯‚´åˆ?exeæ–‡äšg所在的ä½ç½®åQŒç„¶åŽåœ¨½E‹åº¿U通过skinEngine1.SkinFile=fileName(fileName是皮肤文ä»?sskæ–‡äšg的佾|?æ¥è®¾å®šç•Œé¢çš®è‚¤ï¼Œ˜q™ç§åšæ³•é€šå¸¸æ˜¯æˆ‘ä»¬éœ€è¦åœ¨Debugæ–‡äšg夹和Releaseæ–‡äšgå„ä¿å˜ä¸€å¥—皮肤文ä»Óž¼Œå‘布½E‹åºçš„æ—¶å€™ä¹Ÿéœ€è¦é™„å¸¦è¿™äº›æ–‡ä»¶ã€‚ï¼ˆäºŒï¼‰åµŒå…¥èµ„æºæ³•,本文ž®±æ˜¯é‡‡ç”¨˜q™ç§åŠžæ³•å®žçŽ°çš„ï¼Œ˜q™æ ·åšçš„好处是å‘å¸ƒç¨‹åºæ—¶åQˆä¸½Ž¡æ˜¯Debug版本或Release版本åQ‰æ—¶vs自动ž®†çš®è‚¤æ–‡ä»¶ç¼–译进exeæ–‡äšgä¸ï¼Œå‡å°‘½E‹åºå‘布时文件的个数åQŒè€Œä¸”也ä¸ç”¨ç®¡½E‹åºä¸Žçš®è‚¤æ–‡ä»¶çš„相对ä½ç½®ã€?/p>
首先打开VS工具½Ž±ï¼Œæ·ÕdŠ çš®è‚¤æŽ§äšg¾l„äšgåQŒå¦‚下图åQ?br />
ç„¶åŽåœ¨å‡ºçŽ°çš„“选择工具½Ž±é¡¹”ä¸ç‚¹å‡?#8220;‹¹è§ˆ”按钮åQŒç„¶åŽæ‰¾åˆ°IrisSkin2.dllæ–‡äšgåQŒç„¶å?#8220;¼‹®å®š”åQŒå…³é—对è¯çª—å£ä¹‹åŽï¼Œçš®è‚¤æŽ§äšg¾l„äšgž®×ƒ¼šå‡ºçŽ°åœ¨ä½ çš„å·¥å…ïL®±ä¸Šäº†åQˆå…·ä½“å‡ºçŽ°åœ¨å“ªä¸ªåˆ†ç»„è·Ÿä½ æ·ÕdŠ æ—¶æ·»åŠ å“ªä¸ªç»„æœ‰å…³åQ‰ï¼Œå¦‚下图:
åQˆæˆ‘ä¸å°å¿ƒåŠ åˆ°æ‰“å°åˆ†¾l„去了,大家ä¸è¦éª‚我åQšPåQ?/p>
好了åQŒçŽ°åœ¨å¯ä»¥ç¼–å†™ç¨‹åºæµ‹è¯•了åQŒåšä¸€ä¸ªç®€å•çš„½H—体å§ï¼Œç•Œé¢ä¸Šçš„æŽ§äšg如上图所½Cºï¼Œç„¶åŽž®†çš®è‚¤ç»„件拖拽到界é¢ä¸Šï¼Œä¹‹åŽéœ€è¦æŠŠ½E‹åºæ‰€éœ€è¦çš„çš®è‚¤èµ„æºæ–‡äšgæ·ÕdŠ ˜q›æ¥åQŒè¿™é‡Œæˆ‘æ˜¯é‡‡ç”¨æ·»åŠ èµ„æºçš„办法ã€?/p>
æ¥éª¤å¦‚下åQ?br />
åQˆä¸€åQ‰åœ¨WinForm工程上å³é”®å•å‡?#8220;属æ€?#8221;åQŒåœ¨å‡ºçŽ°çš„ç•Œé¢ä¸ç‚?#8220;资溔选项å¡ï¼ŒæŠŠæ‰€éœ€çš„çš®è‚¤èµ„æºæ–‡ä»¶æ·»åŠ è¿›æ¥ï¼ˆé€šè¿‡“æ·ÕdŠ çŽ°æœ‰æ–‡äšg”命ä×oæ·ÕdŠ çš®è‚¤æ–‡äšgåQ‰ï¼Œå¦‚下图:
注æ„如果该皮肤文件夹下除äº?.sskæ–‡äšg之外åQŒè¿˜åŒ…嫿œ‰å…¶å®ƒå›¾ç‰‡æ–‡ä»Óž¼Œå»ø™®®ž®†å®ƒä»¬ä¹Ÿä½œäØ“èµ„æºæ·ÕdŠ åˆ°é¡¹ç›®ä¸ã€‚æ·»åŠ å®Œæˆä¹‹åŽï¼Œæˆ‘们ž®±å¯ä»¥åœ¨ä»£ç ä¸é€šè¿‡Properties.Resources.æ–‡äšgåæ¥èŽ·å–˜q™äº›æ–‡äšg的内容了åQŒé€šè¿‡˜q™ä¸ªæ–ÒŽ³•˜q”回的是文äšg内容的二˜q›åˆ¶æ•°æ®(byte[]),而skinEngine1.SkinStream需è¦çš„æ˜¯ä¸€ä¸ªStream对象åQŒé€šè¿‡msdn我们å¯ä»¥ä»¥è¿™ä¸ªäºŒ˜q›åˆ¶æ•°æ®æž„å¾ä¸€ä¸ªStream对象åQˆnew MemoryStream(byte[] bytes)åQ‰ï¼Œç„¶åŽèµ‹å€¼ç»™çš®è‚¤¾l„äšgçš„SkinStreamå±žæ€§ï¼Œå¦‚æžœéœ€è¦æ¢çš®è‚¤åQŒé‡æ–°æž„å»ÞZ¸€ä¸ªçš®è‚¤èµ„æºæ–‡ä»¶çš„Stream对象åQŒç„¶åŽé‡æ–°èµ‹å€¼å°±è¡Œäº†ã€?/p>
ç•Œé¢æŽ§äšg布局代ç 很简å•,ž®×ƒ¸¾_˜è„“äº†ï¼Œä¸»è¦æŠŠåŽåîC»£ç 放在这里å§åQˆå…¶å®žä¹Ÿå¾ˆç®€å•,ä¸è¿‡éœ€è¦æ³¨æ„ï¼Œå› äØ“ä½¿ç”¨äº†MemoryStream对象åQŒå°±éœ€è¦åœ¨½E‹åºå¼•用½E‹åºé›†éƒ¨åˆ†æ·»åР坹IOæ–šw¢çš„引用:using System.IO;åQ?/p>
代ç 如下åQ?br />
½E‹åºç•Œé¢æ•ˆæžœå¦‚ä¸Šé¢æ‰€½Cºã€?/p>
本文æåˆ°çš„皮肤组件å¯ä»¥åˆ°åQ?a >http://download.csdn.net/user/zhoufoxcn/下è²ã€?/p>
try
{
byte[] byRemoteInfo = WebClientObj.UploadValues("http://www.lovezhao.com/vote.asp","POST",PostVars);
//下é¢éƒ½æ²¡ç”¨å•¦åQŒå°±ä¸Šé¢ä¸€å¥è¯ž®±å¯ä»¥äº†
string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo);
//˜q™æ˜¯èŽ·å–˜q”回信æ¯
richTextBox_instr.Text += sRemoteInfo;
}
catch
{}
if(fileupload.PostedFile!=null)
{
//addto䏸™¦æ·ÕdŠ çš„å±žæ€§ï¼Œaboutfile为文件说æ˜?br> string nam = fileupload.PostedFile.FileName ;
//å–å¾—æ–‡äšgå?抱括路径)里最åŽä¸€ä¸?."的烦å¼?br> int i= nam.LastIndexOf(".");
//å–å¾—æ–‡äšg扩展å?br> string newext =nam.Substring(i);
//˜q™é‡Œæˆ‘è‡ªåŠ¨æ ¹æ®æ—¥æœŸå’Œæ–‡äšg大å°ä¸åŒä¸ºæ–‡ä»¶å‘½å?¼‹®ä¿æ–‡äšgåä¸é‡å¤
DateTime now = DateTime.Now;
string newname=now.DayOfYear.ToString()+fileupload.PostedFile.ContentLength.ToString();
//ä¿å˜æ–‡äšgåˆîC½ 所è¦çš„目录,˜q™é‡Œæ˜¯IISæ ¹ç›®å½•ä¸‹çš„upload目录.ä½ å¯ä»¥æ”¹å?
//注æ„: 我这里用Server.MapPath()å–当剿–‡ä»¶çš„相对目录.在asp.neté‡?\"å¿…é¡»ç”?\\"代替åQŒæŠŠ"upload\\"æ”ÒŽˆ"\\upload\\"ž®±æˆäº†å–当剿–‡äšgçš„ç»å¯¹ç›®å½•了
fileupload.PostedFile.SaveAs(Server.MapPath("upload\\"+newname+newext));
//得到˜q™ä¸ªæ–‡äšg的相兛_±žæ€?æ–‡äšgå?æ–‡äšg¾cÕdž‹,æ–‡äšg大å°
//fname.Text=myFile.PostedFile.FileName;
//fenc.Text=myFile.PostedFile.ContentType ;
//fsize.Text=myFile.PostedFile.ContentLength.ToString();
//䏋颿˜¯ç”Ÿæˆç¾ƒç•¥å›¾
System.Drawing.Image image,aNewImage;
int width,height,newwidth,newheight;
image=System.Drawing.Image.FromFile(Server.MapPath("upload/"+newname.ToString()+newext.ToString()));
System.Drawing.Image.GetThumbnailImageAbort callb =new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
width=image.Width;
height=image.Height;
if(firstpageshow.SelectedValue.ToString()=="1"&&fenlei.SelectedValue.ToString()=="5")
{
newwidth=203;newheight=86;
newheight=height*newwidth/width;
}
else if(isweekman.SelectedValue.ToString()=="1")
{
newwidth=171;newheight=111;
newheight=height*newwidth/width;
}
else if(firstpageshow.SelectedValue.ToString()=="1"&&fenlei.SelectedValue.ToString()=="3")
{
newwidth=171;newheight=111;
newheight=height*newwidth/width;
}
else
{
newwidth=62;newheight=80;
newheight=height*newwidth/width;
}
aNewImage=image.GetThumbnailImage(newwidth,newheight,callb,new System.IntPtr());
aNewImage.Save(Server.MapPath("upload\\"+"small_"+newname+newext));
image.Dispose();
//生戾~©ç•¥å›?生æˆòq¶ä¿å˜å®Œæ¯•,ä¿å˜å是在原囑Öå‰åŠ äº†ä¸€ä¸ªsmall_ã€?br> pic="upload/"+newname.ToString()+newext.ToString();
smallpic="upload/small_"+newname.ToString()+newext.ToString();
}
½W¬â… 部分åQ??XML:NAMESPACE PREFIX = ST1 /?>
1åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆä¸€åQ‰ï¼šé…置应用½E‹åºå——â€?/span>入门½‹?/span>
2åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆäºŒåQ‰ï¼šé…置应用½E‹åºå——â€?/span>˜q›é˜¶½‹?/span>
3åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆä¸‰åQ‰ï¼šæ•°æ®è®‰K—®½E‹åºå——â€?/span>入门½‹?/span>
4åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå››åQ‰ï¼šæ•°æ®è®‰K—®½E‹åºå——â€?/span>˜q›é˜¶½‹?/span>
5åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆäº”åQ‰ï¼šå®‰å…¨åº”用½E‹åºå——â€?/span>入门½‹?/span>
6åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå…åQ‰ï¼šå®‰å…¨åº”用½E‹åºå——â€?/span>˜q›é˜¶½‹?/span>
7åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆä¸ƒåQ‰ï¼šæ—¥å¿—和监‹¹‹åº”用程åºå——â€?/span>入门½‹?/span>
8åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå…«åQ‰ï¼šæ—¥å¿—和监‹¹‹åº”用程åºå——â€?/span>˜q›é˜¶½‹?/span>
9åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆä¹åQ‰ï¼š¾~“冲应用½E‹åºå——â€?/span>入门½‹?/span>
10åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆååQ‰ï¼š¾~“冲应用½E‹åºå——â€?/span>˜q›é˜¶½‹?/span>
11åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå一åQ‰ï¼šå¼‚常处ç†åº”用½E‹åºå——â€?/span>入门½‹?/span>
12åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå二)åQšå¼‚常处ç†åº”用程åºå——â€?/span>˜q›é˜¶½‹?/span>
13åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå三)åQšåŠ å¯†åº”ç”¨ç¨‹åºå——â€?/span>入门½‹?/span>
14åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå四)åQšåˆ›å»ºåŸºäºŽæ¶ˆæ¯é˜Ÿåˆ—(MSMQåQ‰çš„å¼‚æ¥æ—¥å¿—
15åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆå五)åQšé…¾|®åº”用程åºå——â€?/span>设计½‹?/span>
16åQ?span lang="EN-US">Enterprise Library Step By Step¾pÕdˆ—åQˆåå…)åQšä‹É用AppSetting Application Block
½W¬â…¡éƒ¨åˆ†åQ?span lang="EN-US">Enterprise Library 2.0 å¦ä¹
1åQ?span lang="EN-US">Enterprise Library 2.0åQ?åQ‰ï¼šData Access Application Blockå¦ä¹
2åQ?span lang="EN-US">Enterprise Library 2.0åQ?åQ‰ï¼šLogging Application Blockå¦ä¹
3åQ?span lang="EN-US">Enterprise Library 2.0ä¸åŠ å¯†æ•°æ®åº“˜qžæŽ¥å—符ä¸?/span>
½W¬â…¢éƒ¨åˆ†åQ?span lang="EN-US">Enterprise Library 2.0 技å·?span lang="EN-US">
1åQ?span lang="EN-US">Enterprise Library 2.0 技巧(1åQ‰ï¼šå¦‚何使用外部é…置文äšg
2åQ?span lang="EN-US">Enterprise Library 2.0 技å·?span lang="EN-US">åQ?åQ‰ï¼šå¦‚何ž®†é…¾|®ä¿¡æ¯ä¿å˜åˆ°æ•°æ®åº“ä¸
3åQ?span lang="EN-US">Enterprise Library 2.0 技巧(3åQ‰ï¼šè®°å½•ASP.NETç«™ç‚¹ä¸æœªå¤„ç†çš„异å¸?/span>
4åQ?span lang="EN-US">Enterprise Library 2.0 技巧(4åQ‰ï¼šå¦‚何用编½E‹çš„æ–ÒŽ³•æ¥é…¾|®Logging Application Block
½W¬â…£éƒ¨åˆ† Enterprise Library 2.0 Hands On Lab¾˜»è¯‘¾pÕdˆ—
1åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šæ•°æ®è®‰K—®½E‹åºå—(一åQ?/span>
2åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šæ•°æ®è®‰K—®½E‹åºå—(二)
3åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šæ•°æ®è®‰K—®½E‹åºå—(三)
4åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šæ—¥å¿—应用½E‹åºå—(一åQ?/span>
5åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šæ—¥å¿—应用½E‹åºå—(二)
6åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šæ—¥å¿—应用½E‹åºå—(三)
7åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šå¼‚常应用½E‹åºå—(一åQ?/span>
8åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼šå¼‚常应用½E‹åºå—(二)
9åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?åQ‰ï¼š¾~“å˜åº”用½E‹åºå—(一åQ?/span>
10åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?0åQ‰ï¼š¾~“å˜åº”用½E‹åºå—(二)
11åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?1åQ‰ï¼š¾~“å˜åº”用½E‹åºå—(三)
12åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?2åQ‰ï¼šå®‰å…¨åº”用½E‹åºå—(一åQ?/span>
13åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?3åQ‰ï¼šå®‰å…¨åº”用½E‹åºå—(二)
14åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?4åQ‰ï¼šåŠ?span lang="EN-US">密应用程åºå—åQˆä¸€åQ?/span>
15åQ?span lang="EN-US">Enterprise Library 2.0 Hands On Lab ¾˜»è¯‘åQ?5åQ‰ï¼šåŠ å¯†åº”ç”¨½E‹åºå—(二)
½W¬â…¤éƒ¨åˆ† Enterprise Library 3.0 体验¾pÕdˆ—
   1åQ?span lang="EN-US">Enterprise Library 3.0 体验åQ?åQ‰ï¼šé›†æˆVS2005的酾|®å·¥å…·å’Œé…ç½®åŒºåŠ å¯†æ”¯æŒ?/span>NewåQ?/span>
   2åQ?span lang="EN-US">Enterprise Library 3.0 体验åQ?åQ‰ï¼šä½¿ç”¨Validation Application BlockNewåQ?/span>
   3åQ?span lang="EN-US">Enterprise Library 3.0 ä½?span lang="EN-US">验(3åQ‰ï¼šä½¿ç”¨é…置文äšgçš„Validation Application BlockNewåQ?/span>
安装æç¤ºè¾“å…¥åºåˆ—åøP¼Œæ²¡æœ‰åˆ™ä¿ç•™ç©ºåQŒæˆ‘暂时éšä¾¿è¾“å…¥12345-67890-12345åQŒå…ˆçœ‹ä¸€ä¸‹ä»–çš„dll能ä¸èƒ½åƒaspjpeg1.3é‚£æ ·ç›´æŽ¥ä½¿ç”¨ã€‚å®‰è£…æ½Cºé‡èµ·iisæœåŠ¡åQŒé€‰å¦åQŒæ³¨å†Œç»„件一般ä¸éœ€è¦é‡èµ?/p>
如果以å‰è£…过其他版本的aspjpegåQŒéœ€è¦å…ˆåœæ¢iis(net stop iisadmin /y)åQŒå¸è½½åŽŸæ¥çš„¾l„äšg(regsvr32 /u c:/windows/system32/aspjpeg.dll)åQŒç„¶åŽé‡èµ·iis(net start w3svc)
//By xlxcn 从这里开�
从aspjpeg1.5的安装目录å¤åˆ¶aspjpeg.dll到系¾lŸæ–‡ä»¶åŠ çš„system32目录
˜q行regsvr32 c:/windows/system32/aspjpeg.dll åQˆæ ¹æ®ä½ 的系¾lŸæ”¹ä½ 的目录åQ?/p>
aspjpeg的文档ä¸è¯´éœ€è¦å®˜æ–Ҏ供的åºåˆ—åäh‰èƒ½æ£å¸æ€‹É用,如果安装˜q‡ç¨‹ä¸æœ‰è¾“å…¥åºåˆ—å?/p>
在aspä¸è¿è¡Œä¸‹é¢çš„命ä×o更改åºåˆ—åøP¼ˆå¦‚果没有输入˜q‡ï¼Œéœ€è¦åœ¨æ³¨å†Œè¡¨ä¸æ·ÕdР如䏋™å¹ï¼šHKEY_LOCAL_MACHINE\Software\Persits Software\AspJpeg\RegKeyåQ?/p>
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.RegKey = "ä½ çš„åºåˆ—å?
å¯ä»¥ç”¨ä¸‹é¢çš„æ–¹å¼æŸ¥çœ‹æ˜¯å¦æ³¨å†ŒæˆåŠŸåQ?/p>
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Response.Write Jpeg.Expires
我没有注册,˜q行了这则代ç ,得到的结果是2005-1-19 19:15:49ã€‚æ„æ€å¥½åƒæ˜¯å¯ä»¥ä½¿ç”¨åˆ?æœ?9æ—¥ã€?/p>
如果注册æˆåŠŸå¾—åˆ°çš„åº”è¯¥æ˜¯9/9/9999。我ç”?8958-77556-02411注册以åŽå¾—到äº?999-9-9˜q™ä¸ª¾l“æžœ:)æ“作¾pÈ»Ÿæ—‰™—´æ˜„¡¤ºæ–¹å¼æœ‰æ‰€ä¸åŒã€?/p>
以下是aspjpeg1.5的安装文ä»Óž¼Œdllæ–‡äšgå’Œåºåˆ—å·
直接安装åªè¦åœ¨aspjpeg1.5.exe安装˜q‡ç¨‹ä¸è¾“å…¥åºåˆ—å·å›_¯åQŒä½†æ˜¯å¯èƒ½ä¼šå‡ºçްntfs目录讉K—®æƒé™çš„é—®é¢˜ï¼Œéœ€è¦æ‰‹åŠ¨è®¾¾|®å®‰è£…目录对Everyone有访问æƒé™ã€?/p>
如果用aspjpeg.dllåQŒè¯·æŒ‰ç…§ä¸Šé¢çš„æ–¹æ³•å®‰è£…ä»¥åŠæ·»åŠ æ³¨å†Œè¡¨™åV€?/p>
aspjpeg高çñ”使用æ–ÒŽ³•介ç»
aspjpeg是一‹ÆùNžå¸¸å¼ºå¤§çš„囄¡‰‡å¤„熾l„äšgåQŒçº¯è‹±æ–‡ç‰ˆæœ¬ã€‚丘q‡æ—©å·²ç»æœ‰å…è´¹ç‰ˆå’Œç ´è§£ç‰ˆåQŒä½†æ˜¯å¯¹å…¶è¿›è¡Œè¯¦¾l†ä¸Žæ·±å…¥ä»‹ç»çš„æ–‡ç« å´æ˜¯ä¸å¤šï¼Œå³ä‹É有也åªç‰µæ¶‰åˆ°å›„¡‰‡¾~©ç•¥å’Œå›¾ç‰‡æ°´å°ã€‚å¯èƒ½æ˜¯å› 䨓¾U¯è‹±æ–‡çš„¾~˜æ•…ã€?/p>
˜q™é‡Œæˆ‘就是针对这些问题谈谈aspjpeg的高¾U§ç”¨æ³•。这里的技术主è¦åŒ…括:
囄¡‰‡¾~©ç•¥
囄¡‰‡æ°´å°
å®‰å…¨ç æŠ€æœ?
囄¡‰‡åˆ‡å‰²
囄¡‰‡åˆåƈ
æ•°æ®åº“支æŒ?
更多ä¸å¸¸ç”¨çš„æ–ÒŽ³•介ç»
以åŠç›¸å…³çš„一些实用技æœ?
aspjpeg唯一点丑³çš„ž®±æ˜¯è¾“å‡ºæ–¹å¼æ¯”较å•一。在˜q™é‡ŒåQŒæˆ‘们主è¦è°ˆž®†å›¾ç‰‡å¤„ç†ä¿å˜åŽå†è°ƒç”¨çš„˜q™ç§è¾“出æ–ÒŽ³•。å¦å¤–,本äh比较懒,所以有些代ç ä»ç„¶å¼•ç”¨äºŽåŽŸæ–‡æ¡£ï¼Œä¸æ‡‚的地方å¶ä¼šåŠ ä»¥è§£é‡Šï¼
å¦è¿‡vb或è€?netçš„åŒå¿—è‚¯å®šä¸€çœ‹å°±æ˜Žç™½äº†ã€‚åˆ·åæ¥ç€ã€‚呵å‘üc€?
一ã€å›¾ç‰‡ç¾ƒç•?
<%
Set Jpeg = Server.CreateObject("Persits.Jpeg") 调用¾l„äšg
Path = Server.MapPath("images") & "\clock.jpg" 待处ç†å›¾ç‰‡èµ\å¾?
Jpeg.Open Path 打开囄¡‰‡
é«˜ä¸Žå®½äØ“åŽŸå›¾ç‰‡çš„1/2
Jpeg.Width = Jpeg.OriginalWidth / 2
Jpeg.Height = Jpeg.OriginalHeight / 2
ä¿å˜å›„¡‰‡
Jpeg.Save Server.MapPath("images") & "\clock_small.jpg"
%>
<IMG src="http://www.aygfsteel.com/images/clock_small.jpg"> 查看处ç†çš„图ç‰?
Â
二ã€å›¾ç‰‡æ°´å?
<%
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open Server.MapPath("images/dodge_viper.jpg")
开始写文å—
Jpeg.Canvas.Font.Color = &000000' red 颜色
Jpeg.Canvas.Font.Family = "Courier New" å—体
Jpeg.Canvas.Font.Bold = True 是å¦åŠ ç²—
Jpeg.Canvas.Print 10, 10, "Copyright (c) XYZ, Inc."
打å°åæ ‡x 打å°åæ ‡y éœ€è¦æ‰“å°çš„å—符
以下是对囄¡‰‡˜q›è¡Œè¾ÒŽ¡†å¤„ç†
Jpeg.Canvas.Pen.Color = &H000000' black 颜色
Jpeg.Canvas.Pen.Width = 2 ç”Ȭ”宽度
Jpeg.Canvas.Brush.Solid = False 是å¦åŠ ç²—å¤„ç†
Jpeg.Canvas.Bar 1, 1, Jpeg.Width, Jpeg.Height
èµ·å§‹Xåæ ‡ èµ·å§‹Yåæ ‡ 输入长度 输入高度
Jpeg.Save Server.MapPath("images/dodge_viper_framed.jpg") ä¿å˜
%>
Â
三ã€å®‰å…¨ç
安全玛的é“ç†å’ŒåŠ æ°´å°å·®ä¸å¤šï¼Œå¾ˆå¤šæœ‹å‹é—®æˆ‘è¦å…·ä½“çš„ä»£ç æŠ€æœ¯ï¼Œåœ¨è¿™é‡Œæˆ‘ž®±å†™å‡ºæ¥å’Œå¤§å®¶åˆ†äº«ï¼Œä¸€èˆ¬äh我还ä¸å‘Šè¯‰ä»–。呵å‘üc€?
<%
生æˆå®‰å…¨ç 的函数
function make_randomize(max_len,w_n) max_len 生æˆé•¿åº¦åQŒw_nåQ? å¯èƒ½åŒ…å«å—æ¯åQ?åQšåªä¸ºæ•°å?
randomize
for intcounter=1 to max_len
whatnext=int((1-0+1)*rnd+w_n)
if whatnext=0 then
upper=122
lower=97
else
upper=57
lower=48
end if
strnewpass=strnewpass & chr(int((upper-lower+1)*rnd)+lower)
next
make_randomize=strnewpass
end function
%>
生æˆå®‰å…¨ç 的囄¡‰‡ã€‚å½“ç„¶ä½ è¦é¢„å…ˆå‡†å¤‡ä¸€å¼ èƒŒæ™¯å›¾å“?
<%random_num=make_randomize(4,1) 生æˆ4使•°å—的安全ç ?
session("random_num")=random_num ä¸ÞZ»€ä¹ˆè°ƒç”¨sessionåQŒæ²¡æœ‰sessionçš„å®‰å…¨ç æ˜¯å®Œå…¨æ²¡æœ‰æ„义的。呵å‘?
Set Jpeg = Server.CreateObject("Persits.Jpeg") 调用¾l„äšg
Jpeg.Open Server.MapPath("infos/random_pic/random_index.gif") 打开准备的图�
Jpeg.Canvas.Font.Color = &H006699
Jpeg.Canvas.Font.Family = "Arial Black"
Jpeg.Canvas.Font.Bold = false
Jpeg.Canvas.PrintText 0, -2, random_num
jpeg.save Server.MapPath("infos/random_pic/random_index.bmp") ä¿å˜
%> <img src="/infos/random_pic/random_index.bmp" border="0" align="absmiddle">
自己åšåšçœ‹ã€‚呵å‘üc€?
Â
å››ã€å›¾ç‰‡åˆ‡å‰?
一直以æ¥ï¼Œå¯¹aspjpegä¸äº†è§£çš„äºÞZ»¥ä¸ºæ˜¯æ— 法用它æ¥è¿›è¡Œåˆ‡å‰²çš„ã€?
其实有这æ ïLš„一个方法的
crop x1,y1,x2,y2
切割长方型左上角xåæ ‡åQŒyåæ ‡ å³ä¸‹è§’xåæ ‡ yåæ ‡
䏋颿ˆ‘å°±åšä¸€ä¸ªæ¼”½Cºå“ˆ
Set Jpeg = Server.CreateObject("Persits.Jpeg")
jpeg.open server.MapPath("/pic/1.gif")
jpeg.width=70
Jpeg.Height = Jpeg.OriginalHeight*70 / jpeg.Originawidth
jpeg.crop 0,0,70,52 开始切割其实是把超˜q?2è±¡ç´ çš„ä¸‹éƒ¨åˆ†åŽÀLމ
jpeg.save server.MapPath("/temp_pic/small_1.gif") ä¿å˜
æ€Žä¹ˆæ øP¼Œå¾ˆç®€å•å§
Â
五ã€å›¾ç‰‡åˆòq?
我们˜q™é‡Œæ˜¯è¦æŠŠlogo囄¡‰‡åŠ åˆ°dodge_viper.jpg囄¡‰‡ä¸ŠåŽ»
其实åQŒå›¾ç‰‡åˆòq¶çš„æ–ÒŽ³•也å¯ä»¥ç”¨æ¥åŠ¨æ€æ‰“æ°´å°å“?
Set Photo = Server.CreateObject("Persits.Jpeg")
PhotoPath = Server.MapPath("images") & "\dodge_viper.jpg"
Photo.Open PhotoPath
Set Logo = Server.CreateObject("Persits.Jpeg")
LogoPath = Server.MapPath("images") & "\clock.jpg"
Logo.Open LogoPath
Logo.Width = 70
Logo.Height = Logo.Width * Logo.OriginalHeight / Logo.OriginalWidth
Photo.DrawImage 0, 0, Logo
Photo.SendBinary ˜q™é‡Œç”¨äº†sendBinary的输出方法。当ç„Óž¼Œä½ 也å¯ä»¥å…ˆä¿å˜æ›´æ”¹åŽçš„dodge_viper.jpgåQŒå†è¾“入也å¯ä»¥ã€‚我个ähä¸å¤§å–œæ¬¢ç”¨sendBinaryæ–ÒŽ³•åQŒåœ¨¾|‘速慢的时候容易出错。在速度斚w¢ä¹Ÿä¸æ€Žæ ·ã€‚呵å‘üc€?
Â
å…ã€æ•°æ®åº“支æŒ
˜q™é‡Œä¸å¤šè¯´äº†ã€‚其实就是Binaryæ–ÒŽ³•åQŒå¤§å®¶çŸ¥é“图片嘘q›æ•°æ®åº“åªèƒ½å˜äؓ二进制的文äšg的。所以代ç 就懒的写了ã€?
Â
ä¸ƒã€æ›´å¤šæ–¹æ³•介¾l?
Canvas.Line(Left, Top, Right, Bottom)
ç”ÖM¸€æ¡ç›´¾U?
Canvas.Ellipse(Left, Top, Right, Bottom)
ç”Õd‡ºä¸€ä¸ªæ¤åœ?
Canvas.Circle(X, Y, Radius)
ç”Õd‡ºä¸€ä¸ªåœ†
Canvas.Bar(Left, Top, Right, Bottom)
ç”Õd‡ºä¸€ä¸ªé•¿æ–¹åÅžåQŒä¸Šé¢æœ‰ä»£ç 介ç»äº?
Canvas.Font.ShadowColor
æ–‡å—阴媄颜色
Canvas.Font.ShadowXOffset As Long
阴媄Xåæ ‡è®‘Ö®š
Canvas.Font.ShadowYOffset As Long
Yåæ ‡è®‘Ö®š
Canvas.Font.BkMode As String
æ–‡å—背景
½{‰éƒ½ä¸ä¸€æ øP¼Œå‡ 乎是完全的é¢å‘对象设计åQ代ç çš„å¤ç”¨ž®±æ˜¯å…?/font>
ä¸å·®å¼‚较大的特点之一åQŒAsp.net除了å¯ä»¥ç”¨Include以外åQŒè¿˜æä¾›
了比较有特点的Web控äšgåQŒåŒ…括:Ascxå½¢å¼å’Œå¸¦è®¾è®¡æ—¶æ”¯æŒçš„æŽ?/font>
ä»¶[本文属于åŽè€…],ä¸ÞZº†ç†Ÿæ‚‰˜q™äº›æ–°æ¦‚念,我自己写了个Web控äšgã€?/font>
在实际项目丘q行使用良好åQŒä»¥åŽï¼Œè¦æœ‰æ—‰™—´åQŒæˆ‘˜q˜å°†ä¸æ–改进ã€?/font>
ValidateCode控äšgçš„ä‹É用方æ³?
½W¬ä¸€æ¥ï¼š
¾~–译我æä¾›çš„原代ç ? ç„¶åŽ,在Studio.net 2003工具æ 上, 选择"æ·ÕdŠ /¿U»é™¤™å?, 选举~–译好的dllæ–‡äšgã€?/font>
½W¬äºŒæ¥ï¼š
工具æ 上ž®×ƒ¼šå¤šä¸€ä¸ªWeb控äšgValidateCode,åšå¥½ä¸€ä¸ªWeb½H—体,在Studio.net 2003å¼€å‘界é¢ä¸Š,直接把控件拖到WebFormä¸?ž®±OKåQ?/font>
½W¬ä¸‰æ¥ï¼š
在该控äšgçš„GraphicOK事äšgä¸èŽ·å–,验è¯ç çš„å—符信æ¯åQŒç”¨äºŽå’Œç”¨æˆ·å½•å…¥åšæ¯”较ï¼
最åŽä¸€æ¥ï¼š
åœ¨ç½‘ç«™çš„æ ¹ç›®å½•ä¸‹åQŒå¾ä¸€ä¸ªtemp目录åQˆä¹Ÿå¯ä»¥è‡ªå·±æŒ‡å®šç›®å½•åQ‰ï¼Œç”¨äºŽå˜æ”¾éªŒè¯ç ?/font>
囄¡‰‡åQŒä¸ç”¨æ‹…心,代ç ä¼šè‡ªåŠ¨åˆ é™¤æ— ç”¨çš„å›„¡‰‡åQ?/font>
原代ç 如下:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace WebValidateCode
{
 /// <summary>
 /// ValidateCode 的摘è¦è¯´æ˜Žã€?br /> /// 设计è€?王æ“væ³?2004-11-20
 /// </summary>
 ///
 public enum GraphicType
 {
  Jpg = 0,
  Gif = 1,
  Png = 2,
  Bmp = 3,
 }
 //[ToolboxBitmap(@"D:\DotnetApp\ValidateCode\ValidateCode.bmp") ] //讄¡½®æŽ§äšg在工å…ïL®±ä¸Šçš„å›¾æ ‡
 public class ValidateCode : System.Web.UI.WebControls.WebControl ,INamingContainer
 {
  private int pCodelen=5;
  private int pChartWidth=100;
  private int pChartHeight=20;
  private GraphicType pChartType;
 Â
  private string pAuthenCode;
  private string pTempImageURLPath="/temp";
  private string pAuthenImageFullname;
  private string pAuthenImageFullURL;
 Â
  //ç”Ÿæˆæ ¡éªŒç çš„å˜é‡ start
  private Bitmap validateImage;
  private Graphics g;
  //ç”Ÿæˆæ ¡éªŒç çš„å˜é‡ End
  private TextBox txt=new TextBox();
  private System.Web.UI.WebControls.Image img= new System.Web.UI.WebControls.Image();
  #region 定义控äšg事äšg
 Â
  public delegate void GraphicCreated(object sender, EventArgs e);
  public event EventHandler GraphicOK;  //åœ¨æ ¡éªŒå›¾ç‰‡ç”Ÿæˆç»“æŸä»¥åŽè§¦å?/p>
  protected virtual void OnGraphicOK(object sender, EventArgs e)
  {  Â
   if (GraphicOK != null)
   {
    //Invokes the delegates.
    GraphicOK(sender, e);
   } Â
  }
Â
  #endregion
   Â
  #region 控äšg属æ€?br /> Â
  //ç”Ÿæˆæ ¡éªŒç 的长度
  [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("需è¦éªŒè¯ç 的长åº?廸™®®åœ?~8ä½ä¹‹é—?")]
  public int CodeLength
  {
   get
   {
    return pCodelen;
   }
   set
   {
    pCodelen = value;
   }
  }
  //ç”Ÿæˆæ ¡éªŒç 的长度
  [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("生æˆéªŒè¯ç å›¾ç‰‡çš„ä¸´æ—¶å˜æ”¾è·¯å¾„,è¦æ±‚必须是网站下的虚拟目å½?")]
  public string TempImageURLPath
  {
   get
   {
    return pTempImageURLPath;
   }
   set
   {
    pTempImageURLPath = value;
   }
  }
  [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(GraphicType.Jpg),Description("é€‰æ‹©ç”Ÿæˆæ ¡éªŒå›¾æ–‡ä»¶çš„¾cÕdž‹(Jpg;Gif;Png;Bmp)!")]
  public GraphicType ChartType
  {
   get
   {
    return pChartType;
   }
   set
   {
    pChartType = value;
   } Â
  }
  //ç”Ÿæˆæ ¡éªŒç 图片的宽度
  public int ChartWidth
  {
   get
   {
    return pChartWidth;
   }
   set
   {
    pChartWidth = value;
   }
  }
  //ç”Ÿæˆæ ¡éªŒç 图片的高度
  public int ChartHeight
  {
   get
   {
    return pChartHeight;
   }
   set
   {
    pChartHeight = value;
   }
  }
  //需è¦ç”Ÿæˆçš„æ ¡éªŒç ?br />  public string AuthenCode
  {
   get
   {
    return pAuthenCode;
   }
   set
   {
    pAuthenCode = value;
   }
  }
  #endregion
  /// <summary>
  /// ž®†æ¤æŽ§äšg呈现¾l™æŒ‡å®šçš„è¾“å‡ºå‚æ•°ã€?br />  /// </summary>
  /// <param name="output"> è¦å†™å‡ºåˆ°çš?HTML ¾~–写å™?</param>
  protected override void Render(HtmlTextWriter output)
  {
       Â
   System.Web.UI.WebControls.Image objImage;
        //TextBox objTxt;
   Â
   Â
   //¾l˜åˆ¶åŒ…å«çš„æŽ§ä»¶Â  Â?br />   objImage = (System.Web.UI.WebControls.Image) Controls[0];Â
   //objTxt = (TextBox) Controls[1];    Â
  Â
   if(pAuthenCode==null)
     pAuthenCode=GetValidateCode();
            Â
   OnGraphicOK(this,EventArgs.Empty );
  Â
   GetRandomImage(pAuthenCode);
   objImage.ImageUrl=pAuthenImageFullURL;
   objImage.RenderControl(output);Â
               Â
  }
  /// <summary>
  /// ¾l™æŽ§ä»¶æ·»åŠ åæŽ§äšg
  /// </summary>
  protected override void CreateChildControls(   )
  {
  Â
   //Controls.Add(btn);
   Controls.Add(img);
   //Controls.Add(txt);
  }
  /// <summary>
  /// 控äšgLoad时候属性的åˆå§‹åŒ?br />  /// </summary>
  /// <param name="e"></param>
  protected override void OnLoad(System.EventArgs e)
  {
     EraseOldGraphic();  //åˆ é™¤˜q‡æœŸçš„图ç‰?br />  }
  /// <summary>
  /// 生æˆéšæœºçš?br />  /// </summary>
  private void MakeRandomFileName()
  {
   string strRandName=DateTime.Now.Ticks.ToString()+".jpg"; Â
   pAuthenImageFullname=this.Page.MapPath(TempImageURLPath)+@"\"+strRandName;
   pAuthenImageFullURL=TempImageURLPath+"/"+strRandName;
  }
  private void GetRandomImage(string strValidateCode)
  {  Â
   //生æˆéšå³å›„¡‰‡çš„å…¨å?和全URL
   MakeRandomFileName();
   validateImage = new Bitmap(pChartWidth, pChartHeight, PixelFormat.Format24bppRgb); // .Format24bppRgb);
   g = Graphics.FromImage(validateImage);
Â
   g.Clear(Color.LightGray) ;
   //g.DrawString(strValidateCode , new Font("宋体",16,FontStyle.Bold),new SolidBrush(Color.DarkRed),new PointF(2,2));
   for(int i=0;i<strValidateCode.Length;i++)
   {    Â
    Random r = new Random();
    PointF startPos=new PointF(r.Next(3,6)+(r.Next(12,14)*i ),r.Next(-1,2) );
      Â
    g.DrawString(strValidateCode.Substring(i,1) , new Font("宋体",14,FontStyle.Italic),new SolidBrush(Color.Blue),startPos);
   }
  Â
   //g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point(120,30), Color.FromArgb(0,0,0,0),Color.FromArgb(255,255,255,255)),0,0,120,30);
   switch(pChartType)
   {
    case GraphicType.Jpg:
   Â
     validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);
     break;
Â
    case GraphicType.Gif:
     validateImage.Save(pAuthenImageFullname, ImageFormat.Gif);
     break;
    case GraphicType.Png:
     validateImage.Save(pAuthenImageFullname, ImageFormat.Png);
     break;
Â
    case GraphicType.Bmp:
     validateImage.Save(pAuthenImageFullname, ImageFormat.Bmp);
     break;
Â
    default:
     validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);
     break;
  Â
   }
      Â
   validateImage.Dispose();
   g.Dispose();
  Â
  Â
 Â
  }
  /// <summary>
  /// 动æ€ä»Žæ•°å—å’Œå—æ¯ç»„æˆçš„å…ƒç´ ä¸åЍæ€é€‰æ‹©ç”Ÿæˆæ ¡éªŒç ?br />  /// </summary>
  private string GetValidateCode()
  {
   char[] s = new char[]{'0','1', '2','3','4','5','6','7','8','9','a'
         ,'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'
         ,'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G'
         ,'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W'
         ,'X','Y','Z'};
   string num = "";
   Random r = new Random();
   //æ ÒŽ®ç”¨æˆ·éœ€è¦çš„长度æ¥å®šä¹‰éªŒè¯ç çš„ä½æ•?br />   for(int i = 0; i < CodeLength; i++)
   {
    num += s[r.Next(0, s.Length)].ToString();
   }
  Â
   return num;
  }
  /// <summary>
  /// 清除旉™—´‘…过20¿U’的临时囄¡‰‡è®°å½•
  /// </summary>
  /// <returns>æˆåŠŸ˜q”回true,å¤ÞpÓ|˜q”回false</returns>
  public bool EraseOldGraphic()
  {
   try
   {
    DirectoryInfo Dinfo=new DirectoryInfo(this.Page.MapPath(pTempImageURLPath));
    FileInfo[] FileSet;
Â
    if(Dinfo.Exists)
    {   Â
     switch(pChartType)
     {
      case GraphicType.Jpg:
   Â
       FileSet=Dinfo.GetFiles("*.jpg");
       break;
Â
      case GraphicType.Gif:
       FileSet=Dinfo.GetFiles("*.gif");
       break;
      case GraphicType.Png:
       FileSet=Dinfo.GetFiles("*.png");
       break;
Â
      case GraphicType.Bmp:
       FileSet=Dinfo.GetFiles("*.bmp");
       break;
Â
      default:
       FileSet=Dinfo.GetFiles("*.jpg");
       break;
  Â
     }
     foreach(FileInfo fileInfo in FileSet)
     {
      if(fileInfo.Exists)
      {
       DateTime dts=DateTime.Now;
       DateTime dtc=fileInfo.CreationTime;
       TimeSpan ts=dts-dtc;
Â
       if(ts.Seconds>20)
       {       Â
        fileInfo.Delete();
       }
      }
     }
    }
    return true;
   }
   catch(IOException ioe)
   {
      return false;
   }
  }
 Â
 }
}
ã€€ã€€ä¼ é€å‚敎ͼš
response.write("åQœscriptåQžwindow.open(â€?.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"â€?åQ?scriptåQ?)
ã€€ã€€æŽ¥æ”¶å‚æ•°åQ?o:p>
string a = Request.QueryString("id");
string b = Request.QueryString("id1");
  2.ä¸ºæŒ‰é’®æ·»åŠ å¯¹è¯æ¡†
Button1.Attributes.Add("onclick","return confirm(’确��");
button.attributes.add("onclick","if(confirm(’are you sure...?�){return true;}else{return false;}")
  3.åˆ é™¤è¡¨æ ¼é€‰å®šè®°å½•
int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];
string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString()
  4.åˆ é™¤è¡¨æ ¼è®°å½•è¦å‘Š
private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)
{
 switch(e.Item.ItemType)
 {
  case ListItemType.Item :
  case ListItemType.AlternatingItem :
  case ListItemType.EditItem:
   TableCell myTableCell;
   myTableCell = e.Item.Cells[14];
   LinkButton myDeleteButton ;
   myDeleteButton = (LinkButton)myTableCell.Controls[0];
   myDeleteButton.Attributes.Add("onclick","return confirm(’您是妼‹®å®šè¦åˆ 除这æ¡ä¿¡æ¯â€?;");
   break;
  default:
   break;
 }
}
  5.ç‚¹å‡»è¡¨æ ¼è¡Œé“¾æŽ¥å¦ä¸€™å?o:p>
private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
 //ç‚¹å‡»è¡¨æ ¼æ‰“å¼€
 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  e.Item.Attributes.Add("onclick","window.open(’Default.aspx?id=" + e.Item.Cells[0].Text + "�;");
}
  åŒå‡»è¡¨æ ¼˜qžæŽ¥åˆ°å¦ä¸€™å?o:p>
  åœ?span lang="EN-US">itemDataBind事äšgä¸?o:p>
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
 string OrderItemID =e.item.cells[1].Text;
 ...
 e.item.Attributes.Add("ondblclick", "location.href=�./ShippedGrid.aspx?id=" + OrderItemID + "�);
}
  åŒå‡»è¡¨æ ¼æ‰“å¼€æ–îC¸€™å?o:p>
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
 string OrderItemID =e.item.cells[1].Text;
 ...
 e.item.Attributes.Add("ondblclick", "open(�./ShippedGrid.aspx?id=" + OrderItemID + "�");
}
6.è¡¨æ ¼‘…è¿žæŽ¥åˆ—ä¼ é€’å‚æ•?o:p>
åQ?span lang="EN-US">asp:HyperLinkColumn Target="_blank" headertext="IDå? DataTextField="id" NavigateUrl="aaa.aspx?id=â€?br /> åQ?# DataBinder.Eval(Container.DataItem, "æ•°æ®å—段1")%åQžâ€?& name=’<%# DataBinder.Eval(Container.DataItem, "æ•°æ®å—段2")%åQžâ€?/åQ?br />  7.è¡¨æ ¼ç‚¹å‡»æ”¹å˜é¢œè‰²
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
 e.Item.Attributes.Add("onclick","this.style.backgroundColor=�99cc00�
    this.style.color=’buttontext�this.style.cursor=’default�");
}
  写在DataGrid的_ItemDataBound�o:p>
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=�99cc00�
   this.style.color=’buttontext�this.style.cursor=’default�");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=’�this.style.color=’�");
}
  8.å…³äºŽæ—¥æœŸæ ¼å¼
ã€€ã€€æ—¥æœŸæ ¼å¼è®‘Ö®š
DataFormatString="{0:yyyy-MM-dd}"
  我觉得应该在itembound事äšgä¸?o:p>
e.items.cell["ä½ çš„åˆ?].text=DateTime.Parse(e.items.cell["ä½ çš„åˆ?].text.ToString("yyyy-MM-dd"))
  9.获å–错误信æ¯òq¶åˆ°æŒ‡å®š™åµé¢
  ä¸è¦ä½¿ç”¨Response.Redirect,而应该ä‹É用Server.Transfer
  e.g
// in global.asax
protected void Application_Error(Object sender, EventArgs e) {
if (Server.GetLastError() is HttpUnhandledException)
Server.Transfer("MyErrorPage.aspx");
//其余的éžHttpUnhandledException异常交给ASP.NET自己处熞®±okayäº?:)
}
  Redirect会导致poståQbackçš„äñ”生从而丢å¤×ƒº†é”™è¯¯ä¿¡æ¯åQŒæ‰€ä»¥é¡µé¢å¯¼å‘应该直接在æœåŠ¡å™¨ç«¯æ‰§è¡ŒåQŒè¿™æ ·å°±å¯ä»¥åœ¨é”™è¯¯å¤„ç†é¡µé¢å¾—到出错信æ¯åƈ˜q›è¡Œç›¸åº”的处ç?
  10.清空Cookie
Cookie.Expires=[DateTime];
Response.Cookies("UserName").Expires = 0
  11.自定义异常处ç?o:p>
//自定义异常处ç†ç±»
using System;
using System.Diagnostics;
namespace MyAppException
{
 /// åQœsummaryåQ?br /> /// 从系¾lŸå¼‚常类ApplicationException¾l§æ‰¿çš„应用程åºå¼‚常处ç†ç±»ã€?br /> /// 自动ž®†å¼‚常内容记录到Windows NT/2000çš„åº”ç”¨ç¨‹åºæ—¥å¿?br /> /// åQ?summaryåQ?br /> public class AppException:System.ApplicationException
 {
  public AppException()
  {
   if (ApplicationConfiguration.EventLogEnabled)LogEvent("出现一个未知错误�);
  }
 public AppException(string message)
 {
  LogEvent(message);
 }
 public AppException(string message,Exception innerException)
 {
  LogEvent(message);
  if (innerException != null)
  {
   LogEvent(innerException.Message);
  }
 }
 //日志记录¾c?br /> using System;
 using System.Configuration;
 using System.Diagnostics;
 using System.IO;
 using System.Text;
 using System.Threading;
 namespace MyEventLog
 {
  /// åQœsummaryåQ?br />  /// 事äšg日志记录¾c»ï¼Œæä¾›äº‹äšg日志记录支æŒ
  /// åQœremarksåQ?br />  /// 定义äº?个日志记录方æ³?(error, warning, info, trace)
  /// åQ?remarksåQ?br />  /// åQ?summaryåQ?br />  public class ApplicationLog
  {
   /// åQœsummaryåQ?br />   /// ž®†é”™è¯¯ä¿¡æ¯è®°å½•到Win2000/NT事äšg日志ä¸?br />   /// åQœparam name="message"åQžéœ€è¦è®°å½•的文本信æ¯åQ?paramåQ?br />   /// åQ?summaryåQ?br />   public static void WriteError(String message)
   {
    WriteLog(TraceLevel.Error, message);
   }
   /// åQœsummaryåQ?br />   /// ž®†è¦å‘Šä¿¡æ¯è®°å½•到Win2000/NT事äšg日志ä¸?br />   /// åQœparam name="message"åQžéœ€è¦è®°å½•的文本信æ¯åQ?paramåQ?br />   /// åQ?summaryåQ?br />   public static void WriteWarning(String message)
   {
    WriteLog(TraceLevel.Warning, message);  
   }
   /// åQœsummaryåQ?br />   /// ž®†æ½CÞZ¿¡æ¯è®°å½•到Win2000/NT事äšg日志ä¸?br />   /// åQœparam name="message"åQžéœ€è¦è®°å½•的文本信æ¯åQ?paramåQ?br />   /// åQ?summaryåQ?br />   public static void WriteInfo(String message)
   {
    WriteLog(TraceLevel.Info, message);
   }
   /// åQœsummaryåQ?br />   /// ž®†è·Ÿítªä¿¡æ¯è®°å½•到Win2000/NT事äšg日志ä¸?br />   /// åQœparam name="message"åQžéœ€è¦è®°å½•的文本信æ¯åQ?paramåQ?br />   /// åQ?summaryåQ?br />   public static void WriteTrace(String message)
   {
    WriteLog(TraceLevel.Verbose, message);
   }
   /// åQœsummaryåQ?br />   /// æ ¼å¼åŒ–记录到事äšgæ—¥å¿—çš„æ–‡æœ¬ä¿¡æ¯æ ¼å¼?br />   /// åQœparam name="ex"åQžéœ€è¦æ ¼å¼åŒ–的异常对象</paramåQ?br />   /// åQœparam name="catchInfo"åQžå¼‚叿€¿¡æ¯æ ‡é¢˜å—½W¦ä¸².åQ?paramåQ?br />   /// åQœretvalueåQ?br />   /// åQœparaåQžæ ¼å¼åŽçš„异叿€¿¡æ¯å—½W¦ä¸²åQŒåŒ…æ‹¬å¼‚å¸¸å†…å®¹å’Œè·Ÿè¸ªå †æ ˆ.åQ?paraåQ?br />   /// åQ?retvalueåQ?br />   /// åQ?summaryåQ?br />   public static String FormatException(Exception ex, String catchInfo)
   {
    StringBuilder strBuilder = new StringBuilder();
    if (catchInfo != String.Empty)
    {
     strBuilder.Append(catchInfo).Append("\r\n");
    }
    strBuilder.Append(ex.Message).Append("\r\n").Append(ex.StackTrace);
    return strBuilder.ToString();
   }
   /// åQœsummaryåQ?br />   /// 实际事äšg日志写入æ–ÒŽ³•
   /// åQœparam name="level"åQžè¦è®°å½•ä¿¡æ¯çš„çñ”别(error,warning,info,trace).åQ?paramåQ?br />   /// åQœparam name="messageText"åQžè¦è®°å½•的文æœ?åQ?paramåQ?br />   /// åQ?summaryåQ?br />   private static void WriteLog(TraceLevel level, String messageText)
   {
    try
    {
     EventLogEntryType LogEntryType;
     switch (level)
     {
      case TraceLevel.Error:
       LogEntryType = EventLogEntryType.Error;
       break;
      case TraceLevel.Warning:
       LogEntryType = EventLogEntryType.Warning;
       break;
      case TraceLevel.Info:
       LogEntryType = EventLogEntryType.Information;
       break;
      case TraceLevel.Verbose:
       LogEntryType = EventLogEntryType.SuccessAudit;
       break;
      default:
       LogEntryType = EventLogEntryType.SuccessAudit;
       break;
     }
     EventLog eventLog = new EventLog("Application", ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );
     //写入事äšg日志
     eventLog.WriteEntry(messageText, LogEntryType);
    }
   catch {} //忽略ä»ÖM½•异常
  }
 } //class ApplicationLog
}
12.Panel æ¨ªå‘æ»šåЍåQŒçºµå‘自动扩å±?o:p>
åQ?span lang="EN-US">asp:panel style="overflow-x:scroll;overflow-y:auto;"åQžï¼œ/asp:panelåQ?br />  13.回èžRè½¬æ¢æˆTab
åQ?span lang="EN-US">script language="javascript" for="document" event="onkeydown"åQ?br /> if(event.keyCode==13 && event.srcElement.type!=’buttonâ€?&& event.srcElement.type!=’submitâ€?&&     event.srcElement.type!=’resetâ€?&& event.srcElement.type!=’â€?amp;& event.srcElement.type!=’textareaâ€?;
   event.keyCode=9;
åQ?scriptåQ?o:p>
onkeydown="if(event.keyCode==13) event.keyCode=9"
  14.DataGrid‘…çñ”˜qžæŽ¥åˆ?o:p>
DataNavigateUrlField="å—æ®µå? DataNavigateUrlFormatString="http://xx/inc/delete.aspx?ID={0}"
  15.DataGrid行éšé¼ æ ‡å˜è‰²
private void DGzf_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
 if (e.Item.ItemType!=ListItemType.Header)
 {
  e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=\""+e.Item.Style["BACKGROUND-COLOR"]+"\"");
  e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=\""+ "#EFF3F7"+"\"");
 }
}
  16.模æ¿åˆ?br />www.knowsky.com
åQ?span lang="EN-US">ASP:TEMPLATECOLUMN visible="False" sortexpression="demo" headertext="ID"åQ?br />åQœITEMTEMPLATEåQ?br />åQœASP:LABEL text=’<%# DataBinder.Eval(Container.DataItem, "ArticleID")%åQžâ€?runat="server" width="80%" id="lblColumn" /åQ?br />åQ?ITEMTEMPLATEåQ?br />åQ?ASP:TEMPLATECOLUMNåQ?o:p>
åQ?span lang="EN-US">ASP:TEMPLATECOLUMN headertext="选ä¸"åQ?br />åQœHEADERSTYLE wrap="False" horizontalalign="Center"åQžï¼œ/HEADERSTYLEåQ?br />åQœITEMTEMPLATEåQ?br />åQœASP:CHECKBOX id="chkExport" runat="server" /åQ?br />åQ?ITEMTEMPLATEåQ?br />åQœEDITITEMTEMPLATEåQ?br />åQœASP:CHECKBOX id="chkExportON" runat="server" enabled="true" /åQ?br />åQ?EDITITEMTEMPLATEåQ?br />åQ?ASP:TEMPLATECOLUMNåQ?br />  åŽå°ä»£ç
protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)
{
 //改å˜åˆ—的选定åQŒå®žçŽ°å…¨é€‰æˆ–å…¨ä¸é€‰ã€?br /> CheckBox chkExport ;
 if( CheckAll.Checked)
 {
  foreach(DataGridItem oDataGridItem in MyDataGrid.Items)
  {
   chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
   chkExport.Checked = true;
  }
 }
 else
 {
  foreach(DataGridItem oDataGridItem in MyDataGrid.Items)
  {
   chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
   chkExport.Checked = false;
  }
 }
}
  17.æ•°å—æ ¼å¼åŒ?o:p>
  ã€ï¼œ%#Container.DataItem("price")%åQžçš„¾l“æžœæ˜?00.0000åQŒæ€Žæ ·æ ¼å¼åŒ–䨓500.00?ã€?o:p>
åQ?span lang="EN-US">%#Container.DataItem("price","{0:åK?,##0.00}")%åQ?o:p>
int i=123456;
string s=i.ToString("###,###.00");
18.æ—¥æœŸæ ¼å¼åŒ?o:p>
  ã€?span lang="EN-US">aspx™åµé¢å†…:åQ?# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date")%åQ?o:p>
  昄¡¤ºä¸ºï¼š 2004-8-11 19:44:28
ã€€ã€€æˆ‘åªæƒŒ™¦åQ?span lang="EN-US">2004-8-11 ã€?o:p>
åQ?span lang="EN-US">%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%åQ?br />  应该如何改?
ã€€ã€€ã€æ ¼å¼åŒ–日期ã€?span lang="EN-US">
  å–出æ?span lang="EN-US">,一般是object((DateTime)objectFromDB).ToString("yyyy-MM-dd");
ã€€ã€€ã€æ—¥æœŸçš„验è¯è¡¨è¾¾å¼ã€?span lang="EN-US">
  A.以下æ£ç¡®çš„è¾“å…¥æ ¼å¼ï¼š [2004-2-29], [2004-02-29 10:29:39 pm], [2004/12/31]
^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$
  B.以下æ£ç¡®çš„è¾“å…¥æ ¼å¼ï¼š[0001-12-31], [9999 09 30], [2002/03/03]
^\d{4}[\-\/\s]?((((0[13578])|(1[02]))[\-\/\s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[\-\/\s]?(([0-2][0-9])|(30)))|(02[\-\/\s]?[0-2][0-9]))$
  ã€å¤§ž®å†™è½¬æ¢ã€?o:p>
HttpUtility.HtmlEncode(string);
HttpUtility.HtmlDecode(string)
  19.如何讑֮šå…¨å±€å˜é‡
  Global.asax�o:p>
  Application_Start()事äšgä¸?o:p>
  æ·ÕdŠ Application[属性å] åQ?xxx;
  ž®±æ˜¯ä½ 的全局å˜é‡
  20.æ€Žæ ·ä½œåˆ°HyperLinkColumn生æˆçš„连接åŽåQŒç‚¹å‡»è¿žæŽ¥ï¼Œæ‰“开新窗å£ï¼Ÿ
  HyperLinkColumn有个属性Target,ž®†å™¨å€ÆD®¾¾|®æˆ"_blank"å›_¯.(Target="_blank")
  ã€?span lang="EN-US">ASPNETMENU】点击èœå•项弹出新窗å?o:p>
ã€€ã€€åœ¨ä½ çš?span lang="EN-US">menuData.xmlæ–‡äšgçš„èœå•项ä¸åŠ å…¥URLTarget="_blank"åQŒå¦‚åQ?o:p>
åQ?span lang="EN-US">?xml version="1.0" encoding="GB2312"?åQ?br />åQœMenuData ImagesBaseURL="images/"åQ?
åQœMenuGroupåQ?br />åQœMenuItem Label="内å‚ä¿¡æ¯" URL="Infomation.aspx" åQ?br />åQœMenuGroup ID="BBC"åQ?br />åQœMenuItem Label="公告信æ¯" URL="Infomation.aspx" URLTarget="_blank" LeftIcon="file.gif"/åQ?br />åQœMenuItem Label="¾~–åˆ¶ä¿¡æ¯½Ž€æŠ? URL="NewInfo.aspx" LeftIcon="file.gif" /åQ?br />......
ã€€ã€€æœ€å¥½å°†ä½ çš„aspnetmenuå‡çñ”åˆ?.2ç‰?o:p>
  21.è¯Õd–DataGrid控äšgTextBoxå€?o:p>
foreach(DataGrid dgi in yourDataGrid.Items)
{
 TextBox tb = (TextBox)dgi.FindControl("yourTextBoxId");
 tb.Text....
}
  23.在DataGrid䏿œ‰3个模æ¿åˆ—包å«Textbox分别ä¸?DG_ShuLiang (æ•°é‡) DG_DanJian(å•äh) DG_JinE(金é¢)分别åœ?.6.7åˆ—ï¼Œè¦æ±‚在录入数é‡åŠå•äh的时候自动算出金é¢å³:æ•°é‡*å•äh=金题q˜è¦æ±‚录入时é™åˆ¶ä¸ºæ•°å€¼åž‹.我如何用客户端脚本实现这个功èƒ?
  〖æ€å½’ã€?span lang="EN-US">
åQ?span lang="EN-US">asp:TemplateColumn HeaderText="æ•°é‡"åQ?
åQœItemTemplateåQ?br />åQœasp:TextBox id="ShuLiang" runat=’serverâ€?Text=’<%# DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%åQžâ€?
onkeyup="DoCal()"
/åQ?o:p>
åQ?span lang="EN-US">asp:RegularExpressionValidator id="revS" runat="server" ControlToValidate="ShuLiang" ErrorMessage="must be integer" ValidationExpression="^\d+$" /åQ?br />åQ?ItemTemplateåQ?br />åQ?asp:TemplateColumnåQ?o:p>
åQ?span lang="EN-US">asp:TemplateColumn HeaderText="å•äh"åQ?
åQœItemTemplateåQ?br />åQœasp:TextBox id="DanJian" runat=’serverâ€?Text=’<%# DataBinder.Eval(Container.DataItem,"DG_DanJian")%åQžâ€?
onkeyup="DoCal()"
/åQ?o:p>
åQ?span lang="EN-US">asp:RegularExpressionValidator id="revS2" runat="server" ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^\d+(\.\d*)?$" /åQ?o:p>
åQ?span lang="EN-US">/ItemTemplateåQ?br />åQ?asp:TemplateColumnåQ?o:p>
åQ?span lang="EN-US">asp:TemplateColumn HeaderText="金é¢"åQ?
åQœItemTemplateåQ?br />åQœasp:TextBox id="JinE" runat=’serverâ€?Text=’<%# DataBinder.Eval(Container.DataItem,"DG_JinE")%åQžâ€?/åQ?br />åQ?ItemTemplateåQ?br />åQ?asp:TemplateColumnåQžï¼œscript language="javascript"åQ?br />function DoCal()
{
 var e = event.srcElement;
 var row = e.parentNode.parentNode;
 var txts = row.all.tags("INPUT");
 if (!txts.length || txts.length åQ?3)
  return;
 var q = txts[txts.length-3].value;
 var p = txts[txts.length-2].value;
 if (isNaN(q) || isNaN(p))
  return;
 q = parseInt(q);
 p = parseFloat(p);
 txts[txts.length-1].value = (q * p).toFixed(2);
}
åQ?scriptåQ?o:p>
24.datagrid选定比较底下的行æ—Óž¼Œä¸ÞZ»€ä¹ˆæ€ÀL˜¯åˆäh–°ä¸€ä¸‹ï¼Œç„¶åŽž®±æ»šåŠ¨åˆ°äº†æœ€ä¸Šé¢åQŒåˆšæ‰é€‰å®šçš„è¡Œå› å±òq•的关系ž®Þqœ‹ä¸åˆ°äº†ã€?o:p>
page_load
page.smartNavigation=true
  25.在Datagridä¸ä¿®æ”ÒŽ•°æ®ï¼Œå½“点å‡È¼–辑键æ—Óž¼Œæ•°æ®å‡ºçŽ°åœ¨æ–‡æœ¬æ¡†ä¸ï¼Œæ€Žä¹ˆæŽ§åˆ¶æ–‡æœ¬æ¡†çš„å¤§å° ?
private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)
{
 for(int i=0;iåQœe.Item.Cells.Count-1;i++)
  if(e.Item.ItemType==ListItemType.EditType)
  {
   e.Item.Cells[i].Attributes.Add("Width", "80px")
  }
}
  26.å¯¹è¯æ¡?o:p>
private static string ScriptBegin = "åQœscript language=\"JavaScript\"åQ?;
private static string ScriptEnd = "åQ?scriptåQ?;
public static void ConfirmMessageBox(string PageTarget,string Content)
{
 string ConfirmContent="var retValue=window.confirm(�+Content+"�;"+"if(retValue){window.location=�+PageTarget+"�}";
 ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;
 Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;
 ParameterPage.RegisterStartupScript("confirm",ConfirmContent);
 //Response.Write(strScript);
}
  27. ž®†æ—¶é—´æ ¼å¼åŒ–åQšstring aa=DateTime.Now.ToString("yyyyòq´MM月ddæ—?);
  1.1 å–当å‰å¹´æœˆæ—¥æ—¶åˆ†¿U?
currentTime=System.DateTime.Now;
  1.2 å–当å‰å¹´
int òq? DateTime.Now.Year;
  1.3 å–当剿œˆ
int � DateTime.Now.Month;
  1.4 å–当剿—¥
int æ—? DateTime.Now.Day;
  1.5 å–当剿—¶
int æ—? DateTime.Now.Hour;
  1.6 å–当å‰åˆ†
int � DateTime.Now.Minute;
  1.7 å–当å‰ç§’
int ¿U? DateTime.Now.Second;
  1.8 å–当剿¯«¿U?
int 毫秒= DateTime.Now.Millisecond;
  28åQŽè‡ªå®šä¹‰åˆ†é¡µä»£ç åQ?o:p>
  先定义å˜é‡?åQ?span lang="EN-US">
public static int pageCount; //æ€»é¡µé¢æ•°
public static int curPageIndex=1; //当剙åµé¢
  下一™åµï¼š
if(DataGrid1.CurrentPageIndex åQ?(DataGrid1.PageCount - 1))
{
 DataGrid1.CurrentPageIndex += 1;
 curPageIndex+=1;
}
bind(); // DataGrid1数殾l‘定函数
  上一™åµï¼š
if(DataGrid1.CurrentPageIndex åQ?)
{
 DataGrid1.CurrentPageIndex += 1;
 curPageIndex-=1;
}
bind(); // DataGrid1数殾l‘定函数
  直接™åµé¢è·Œ™{åQ?
int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()䏸™Ÿ©è½¬å€?
if(aåQœDataGrid1.PageCount)
{
 this.DataGrid1.CurrentPageIndex=a;
}
bind();
29åQŽDataGrid使用åQ?
  æ·ÕdŠ åˆ é™¤¼‹®è®¤åQ?span lang="EN-US">
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
 foreach(DataGridItem di in this.DataGrid1.Items)
 {
  if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem)
  {
   ((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return confirm(â€™ç¡®è®¤åˆ é™¤æ¤™å¹å—?â€?;");
  }
 }
}
ã€€ã€€æ ·å¼äº¤æ›¿åQ?
ListItemType itemType = e.Item.ItemType;
if (itemType == ListItemType.Item )
{
 e.Item.Attributes["onmouseout"] = "this.style.backgroundColor=�FFFFFF�";
 e.Item.Attributes["onmouseover"] = "this.style.backgroundColor=�d9ece1�cursor=’hand�" ;
}
else if( itemType == ListItemType.AlternatingItem)
{
 e.Item.Attributes["onmouseout"] = "this.style.backgroundColor=�a0d7c4�";
 e.Item.Attributes["onmouseover"] = "this.style.backgroundColor=�d9ece1�cursor=’hand�" ;
}
  æ·ÕdŠ ä¸€ä¸ªç¼–å·åˆ—åQ?
DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql˜q”回的DataTable
DataColumn dc=dt.Columns.Add("number",System.Type.GetType("System.String"));
for(int i=0;iåQœdt.Rows.Count;i++)
{
 dt.Rows[i]["number"]=(i+1).ToString();
}
DataGrid1.DataSource=dt;
DataGrid1.DataBind();
  DataGrid1䏿·»åŠ ä¸€ä¸ªCheckBoxåQŒé¡µé¢ä¸æ·ÕdŠ ä¸€ä¸ªå…¨é€‰æ¡†
private void CheckBox2_CheckedChanged(object sender, System.EventArgs e)
{
 foreach(DataGridItem thisitem in DataGrid1.Items)
 {
  ((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked;
 }
}
  ž®†å½“å‰é¡µé¢ä¸DataGrid1昄¡¤ºçš„æ•°æ®å…¨éƒ¨åˆ é™?
foreach(DataGridItem thisitem in DataGrid1.Items)
{
 if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked)
 {
  string strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString();
  Del (strloginid); //åˆ é™¤å‡½æ•°
 }
}
  30åQŽå½“æ–‡äšg在ä¸åŒç›®å½•下åQŒéœ€è¦èŽ·å–æ•°æ®åº“˜qžæŽ¥å—符ä¸ÔŒ¼ˆå¦‚æžœ˜qžæŽ¥å—符串放在Web.configåQŒç„¶åŽåœ¨Global.asaxä¸åˆå§‹åŒ–åQ?
  åœ?span lang="EN-US">Application_Start䏿·»åР以䏋代ç :
Application["ConnStr"]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.
   AppSettings["ConnStr"].ToString();
  31åQ?å˜é‡.ToString()
  å—符型è{æ?è½¬äØ“å—符ä¸?span lang="EN-US">
12345.ToString("n"); //ç”Ÿæˆ 12,345.00
12345.ToString("C"); //ç”Ÿæˆ åK?2,345.00
12345.ToString("e"); //ç”Ÿæˆ 1.234500e+004
12345.ToString("f4"); //ç”Ÿæˆ 12345.0000
12345.ToString("x"); //ç”Ÿæˆ 3039 (16˜q›åˆ¶)
12345.ToString("p"); //ç”Ÿæˆ 1,234,500.00%
  32ã€å˜é‡?Substring(傿•°1,傿•°2);
  截å–å—串的一部分åQŒå‚æ•?span lang="EN-US">1ä¸ºå·¦èµ·å§‹ä½æ•°åQŒå‚æ•?为截å–å‡ ä½ã€?如:string s1 = str.Substring(0,2);
  33åQŽåœ¨è‡ªå·±çš„网站上登陆其他¾|‘ç«™åQ?å¦‚æžœä½ çš„™åµé¢æ˜¯é€šè¿‡åµŒå¥—æ–¹å¼çš„è¯åQŒå› ä¸ÞZ¸€ä¸ªé¡µé¢åªèƒ½æœ‰ä¸€ä¸ªFORMåQŒè¿™æ—¶å¯ä»¥å¯¼å‘å¦å¤–一个页é¢å†æäº¤ç™»é™†ä¿¡æ¯)
åQ?span lang="EN-US">SCRIPT language="javascript"åQ?
åQ?--
 function gook(pws)
 {
  frm.submit();
 }
//--åQ?
åQ?span lang="EN-US">/SCRIPTåQžï¼œbody leftMargin="0" topMargin="0" "gook()" marginwidth="0" marginheight="0"åQ?
åQœform name="frm" action=" http://220.194.55.68:6080/login.php?retid=7259 " method="post"åQ?
åQœtråQ?
åQœtdåQ?br />åQœinput id="f_user" type="hidden" size="1" name="f_user" runat="server"åQ?br />åQœinput id="f_domain" type="hidden" size="1" name="f_domain" runat="server"åQ?br />åQœinput class="box" id="f_pass" type="hidden" size="1" name="pwshow" runat="server"åQ?
åQ?span lang="EN-US">INPUT id="lng" type="hidden" maxLength="20" size="1" value="5" name="lng"åQ?br />åQœINPUT id="tem" type="hidden" size="1" value="2" name="tem"åQ?
åQ?span lang="EN-US">/tdåQ?
åQ?span lang="EN-US">/tråQ?
åQ?span lang="EN-US">/formåQ?
  文本框的åç§°å¿…é¡»æ˜¯ä½ è¦ç™»é™†çš„¾|‘页上的åç§°åQŒå¦‚æžœæºç ä¸è¡Œå¯ä»¥ç”¨vsniffer 看看ã€?
ã€€ã€€ä¸‹é¢æ˜¯èŽ·å–用戯‚¾“入的登陆信æ¯çš„代ç :
string name;
name=Request.QueryString["EmailName"];
try
{
 int a=name.IndexOf("@",0,name.Length);
 f_user.Value=name.Substring(0,a);
 f_domain.Value=name.Substring(a+1,name.Length-(a+1));
 f_pass.Value=Request.QueryString["Psw"];
}
catch
{
 Script.Alert("错误的邮½Ž?");
 Server.Transfer("index.aspx");
}
Chris Brooksã€Graeme Malcolmã€Alex Mackmanã€Edward Jezierski
Microsoft Corporation
2002 òq?4 æœ?/p>
摘è¦åQ?/strong>Data Access Application Block 是一ä¸?.NET ¾l„äšgåQŒåŒ…å«ä¼˜åŒ–的数æ®è®‰K—®ä»£ç åQŒå¯ä»¥å¸®åŠ©ç”¨æˆ¯‚°ƒç”¨å˜å‚¨è¿‡½E‹ä»¥åŠå‘ SQL Server æ•°æ®åº“å‘å‡?SQL 文本命ä×o。它˜q”回 SqlDataReaderã€DataSet å’?XmlReader 对象。您å¯ä»¥åœ¨è‡ªå·Þqš„ .NET 应用½E‹åºä¸å°†å…¶ä½œä¸ºæž„é€ å—æ¥ä‹É用,以凞®‘需è¦åˆ›å»ºã€æµ‹è¯•å’Œ¾l´æŠ¤çš„自定义代ç 的数é‡ã€‚您å¯ä»¥ä¸‹è²å®Œæ•´çš?C# å’?Visual Basic .NET æºä»£ç 以åŠç»¼åˆæ–‡æ¡£ã€?
æ‚¨æ˜¯å¦æ£åœ¨ä»Žäº?.NET 应用½E‹åºæ•°æ®è®‰K—®ä»£ç 的设计和开å‘?您是å¦è§‰å¾—自己æ€ÀL˜¯åœ¨åå¤ç¼–写相åŒçš„æ•°æ®è®‰K—®ä»£ç åQŸæ‚¨æ˜¯å¦æ›„¡»ž®†æ•°æ®è®¿é—®ä»£ç 包装在 Helper 函数ä¸ï¼Œä»¥ä¾¿èƒ½å¤Ÿåœ¨ä¸€è¡Œä¸è°ƒç”¨å˜å‚¨˜q‡ç¨‹åQŸå¦‚果是åQŒé‚£ä¹?Microsoft] Data Access Application Block for .NET æ£æ˜¯ä¸ºæ‚¨è®¾è®¡çš„ã€?/p>
Data Access Application Block ž®†è®¿é—?Microsoft SQL Serverâ„?æ•°æ®åº“的性能和资æºç®¡ç†æ–¹é¢çš„æœ€ä½³ç»éªŒå°è£…在一赗÷€‚您å¯ä»¥å¾ˆæ–¹ä¾¿åœ°åœ¨è‡ªå·Þqš„ .NET 应用½E‹åºä¸å°†å…¶ä½œä¸ºæž„é€ å—使用åQŒä»Ž™åµå‡ž®‘了需è¦åˆ›å»ºã€æµ‹è¯•å’Œ¾l´æŠ¤çš„自定义代ç 的数é‡ã€?/p>
ž®¤å…¶æ˜¯ï¼ŒData Access Application Block å¯ä»¥å¸®åŠ©æ‚¨ï¼š
例如åQŒåœ¨å¼•用äº?Data Access Application Block 的应用程åºä¸åQŒæ‚¨å¯ä»¥½Ž€å•地在一行代ç ä¸è°ƒç”¨å˜å‚¨˜q‡ç¨‹òq¶ç”Ÿæˆ?DataSetåQŒå¦‚下所½Cºï¼š
[Visual Basic] Dim ds As DataSet = SqlHelper.ExecuteDataset( _ connectionString, _ CommandType.StoredProcedure, _ "getProductsByCategory", _ new SqlParameter("@CategoryID", categoryID)) [C#] DataSet ds = SqlHelper.ExecuteDataset( connectionString, CommandType.StoredProcedure, "getProductsByCategory", new SqlParameter("@CategoryID", categoryID));
注æ„åQ?/strong>Application Block for .NETåQˆç”¨äº?.NET 的应用程åºå—åQ‰æ˜¯åŸÞZºŽå¯ÒŽˆåŠŸçš„ .NET 应用½E‹åº˜q›è¡Œè¯¦ç»†ç ”究而设计的。它以æºä»£ç çš„åÅžå¼æä¾›ï¼Œæ‚¨å¯ä»¥åŽŸæ ·ä‹É用,也å¯ä»¥é’ˆå¯¹è‡ªå·Þqš„应用½E‹åº˜q›è¡Œè‡ªå®šä¹‰ã€‚该应用½E‹åºå—åÆˆä¸ä»£è¡¨æœªæ?Microsoft ADO.NET ½E‹åºåº“çš„å‘展方å‘。Microsoft ADO.NET ½E‹åºåº“是为在å„ç§ä½¿ç”¨æƒ…况下实现对数æ®è®‰K—®è¡Œäؓ的精¼‹®æŽ§åˆ¶è€Œå¾ç«‹çš„。将æ¥çš„ ADO.NET 版本å¯èƒ½ä¼šä‹É用ä¸åŒçš„æ¨¡åž‹æ¥å®žçŽ°è¿™ä¸ªæ–¹æ¡ˆã€?/blockquote>
本概˜q°çš„其余部分包括以下内容åQ?/p>
Data Access Application Block 包括哪些内容åQ?/a>
下è²å’Œå®‰è£?Data Access Application Block
使用 Data Access Application Block
Data Access Application Block 包括哪些内容åQ?/h2>
æä¾›äº?Data Access Application Block çš„æºä»£ç 以åŠå¿«é€Ÿå…¥é—¨ç¤ºä¾‹åº”用程åºï¼Œæ‚¨å¯ä»¥ä‹Éç”¨è¿™äº›åº”ç”¨ç¨‹åºæµ‹è¯•其功能。Data Access Application Block ˜q˜åŒ…æ‹¬ç»¼åˆæ–‡æ¡£ï¼Œå¯ä»¥å¸®åŠ©æ‚¨ä‹É用和了解所æä¾›çš„代ç ã€?/p>
Visual Studio .NET ™å¹ç›®
æä¾›äº?Data Access Application Block çš?Microsoft Visual Basic] .NET å’?Microsoft Visual C#â„?æºä»£ç ï¼Œä»¥åŠæ¯ç§è¯è¨€çš„快速入门示例客æˆïL«¯åº”用½E‹åºåQŒæ‚¨å¯ä»¥ä½¿ç”¨˜q™äº›åº”用½E‹åº‹¹‹è¯•常è§çš„æ–¹æ¡ˆã€‚è¿™æœ‰åŠ©äºŽåŠ æ·±æ‚¨å¯?Data Access Application Block 的工作原ç†çš„了解。您˜q˜å¯ä»¥è‡ªå®šä¹‰æºä»£ç 以满èƒö自己的需è¦ã€?/p>
您å¯ä»¥ç¼–è¯?Visual Basic å’?C# Microsoft.ApplicationBlocks.Data ™å¹ç›®åQŒä»¥ç”Ÿæˆä¸€ä¸ªåä¸?Microsoft.ApplicationBlocks.Data.dll 的程åºé›†ã€‚该½E‹åºé›†åŒ…括一ä¸?SqlHelper ¾c»ï¼ˆå…¶ä¸åŒ…å«ç”¨äºŽæ‰§è¡Œæ•°æ®åº“å‘½ä»¤çš„æ ¸å¿ƒåŠŸèƒ½åQ‰å’Œä¸€ä¸?SqlhelperParameterCache ¾c»ï¼ˆæä¾›å‚æ•°å‘现和缓å˜åŠŸèƒ½ï¼‰ã€?/p>
文档
Data Access Application Block 的文档主è¦åŒ…括以下内容:
- 使用 Data Access Application Block å¼€å‘应用程åº?/strong>。本部分包括快速入门示例,其ä¸åŒ…å«å¤šç§å¸¸è§çš„ä‹É用情况,å¯ä»¥å¸®åŠ©æ‚¨å¿«é€Ÿè½»æ‘Öœ°æŽŒæ¡ Data Access Application BlockåQˆæ•°æ®è®¿é—®åº”用程åºå—åQ‰çš„使用ã€?
- Data Access Application Block 的设计与实现。本部分包括背景设计原ç†ä¿¡æ¯åQŒä»¥ä¾¿ç”¨æˆäh·±å…¥äº†è§?Data Access Application Block 的设计与实现ã€?
- 部çÖvå’Œè¿è¡?/strong>。本部分包括安装信æ¯åQŒå…¶ä¸åŒ…å«éƒ¨¾|²å’Œæ›´æ–°é€‰é¡¹ä»¥åŠä¸Žå®‰å…¨æ€§æœ‰å…³çš„ä¿¡æ¯ã€?
- å‚è€?/strong>。本部分包嫾l¼åˆçš?API å‚考,其ä¸è¯¦ç»†ä»‹ç»äº†æž„æˆ?Data Access Application Block 的类和接å£ã€?
¾pÈ»Ÿè¦æ±‚
è¦è¿è¡?Data Access Application BlockåQŒéœ€è¦æ»¡‘³ä»¥ä¸‹è¦æ±‚:
- Microsoft Windows] 2000ã€Windows XP Professional
- .NET Framework SDKåQˆè‹±æ–‡ï¼‰çš?RTM 版本
- Visual Studio] .NET çš?RTM 版本åQˆæŽ¨è,但ä¸å¿…需åQ?
- SQL Server 7.0 或更高版本的数æ®åº“æœåС噍
下è²òq¶å®‰è£?Data Access Application Block
您å¯ä»¥èŽ·å–一个包å«å·²½{‘Öçš?Data Access Application Block ½E‹åºé›†å’Œ¾l¼åˆæ–‡æ¡£çš?Windows 安装½E‹åºæ–‡äšgã€?/p>
安装˜q›ç¨‹ž®†åœ¨æ‚¨çš„“程åºâ€èœå•ä¸åˆ›å¾ä¸€ä¸?Microsoft Application Blocks for .NETåQˆç”¨äº?.NET çš?Microsoft 应用½E‹åºå—)åèœå•。该åèœå•䏿œ‰ä¸€ä¸?Data AccessåQˆæ•°æ®è®¿é—®ï¼‰åèœå•,其ä¸åŒ…括用于å¯åŠ¨æ–‡æ¡£çš„é€‰é¡¹å’Œç”¨äºŽå¯åŠ?Data Access Application Block Visual Studio .NET 解决æ–ÒŽ¡ˆçš„选项ã€?/p>
误‚{åˆ?MSDN DownloadsåQˆè‹±æ–‡ï¼‰˜q›è¡Œä¸‹è²ã€?/p>
使用 Data Access Application Block
本节讨论如何使用 Data Access Application Block æ¥æ‰§è¡Œæ•°æ®åº“命ä×o和管ç†å‚数。图 1 昄¡¤ºäº?Data Access Application Block 的主è¦å…ƒç´ ã€?/p>
![]()
å›?1åQšData Access Application Block
SqlHelper ¾cÀL供了一¾l„陿€æ–¹æ³•,å¯ä»¥ç”¨æ¥å?SQL Server æ•°æ®åº“å‘凸™®¸å¤šå„¿Uä¸åŒç±»åž‹çš„命ä×oã€?/p>
SqlHelperParameterCache ¾cÀL供命令傿•°ç¼“å˜åŠŸèƒ½ï¼Œå¯ä»¥ç”¨æ¥æé«˜æ€§èƒ½ã€‚该¾cÈ”±è®¸å¤š Execute æ–ÒŽ³•åQˆå°¤å…¶æ˜¯é‚£äº›åªè¿è¡Œå˜å‚¨è¿‡½E‹çš„é‡å†™æ–ÒŽ³•åQ‰åœ¨å†…部使用。数æ®è®¿é—®å®¢æˆïL«¯ä¹Ÿå¯ä»¥ç›´æŽ¥ä‹É用它æ¥ç¼“å˜ç‰¹å®šå‘½ä»¤çš„ç‰¹å®šå‚æ•°é›†ã€?/p>
使用 SqlHelper ¾cÀL‰§è¡Œå‘½ä»?/h3>
SqlHelper ¾cÀLä¾›äº†äº”ç§ Shared (Visual Basic) æˆ?static (C#) æ–ÒŽ³•åQŒå®ƒä»¬æ˜¯åQ?strong>ExecuteNonQueryã€?strong>ExecuteDatasetã€?strong>ExecuteReaderã€?strong>ExecuteScalar å’?ExecuteXmlReader。实现的æ¯ç§æ–ÒŽ³•都æä¾›ä¸€¾l„一致的é‡è²ã€‚è¿™æä¾›äº†ä¸€¿U很好的使用 SqlHelper ¾cÀL¥æ‰§è¡Œå‘½ä×o的模å¼ï¼ŒåŒæ—¶ä¸ºå¼€å‘äh员选择讉K—®æ•°æ®çš„æ–¹å¼æä¾›äº†å¿…è¦çš„絋zÀL€§ã€‚毿U方法的é‡è²éƒ½æ”¯æŒä¸åŒçš„æ–ÒŽ³•傿•°åQŒå› æ¤å¼€å‘äh员å¯ä»¥ç¡®å®šä¼ 递连接ã€äº‹åŠ¡å’Œå‚æ•°ä¿¡æ¯çš„æ–¹å¼ã€‚ç±»ä¸å®žçŽ°çš„æ‰€æœ‰æ–¹æ³•éƒ½æ”¯æŒä»¥ä¸‹é‡è²åQ?/p>
[Visual Basic] Execute* (ByVal connection As SqlConnection, _ ByVal commandType As CommandType, _ ByVal CommandText As String) Execute* (ByVal connection As SqlConnection, _ ByVal commandType As CommandType, _ ByVal commandText As String, _ ByVal ParamArray commandParameters() As SqlParameter) Execute* (ByVal connection As SqlConnection, _ ByVal spName As String, _ ByVal ParamArray parameterValues() As Object) Execute* (ByVal transaction As SqlTransaction, _ ByVal commandType As CommandType, _ ByVal commandText As String) Execute* (ByVal transaction As SqlTransaction, _ ByVal commandType As CommandType, _ ByVal commandText As String, _ ByVal ParamArray commandParameters() As SqlParameter) Execute* (ByVal transaction As SqlTransaction, _ ByVal spName As String, _ ByVal ParamArray parameterValues() As Object) [C#] Execute* (SqlConnection connection, CommandType commandType, string commandText) Execute* (SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters) Execute* (SqlConnection connection, string spName, params object[] parameterValues) Execute* (SqlConnection connection, CommandType commandType, string commandText) Execute* (SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters) Execute* (SqlConnection connection, string spName, params object[] parameterValues)除这些é‡è½½ä»¥å¤–,é™?ExecuteXmlReader 之外的其他方法还æä¾›äº†å¦ä¸€¿Ué‡è½½ï¼šå…许ž®†è¿žæŽ¥ä¿¡æ¯ä½œä¸ø™¿žæŽ¥å—½W¦ä¸²è€Œä¸æ˜¯è¿žæŽ¥å¯¹è±¡æ¥ä¼ 递,如下é¢çš„æ–ÒŽ³•½{‘Öæ‰€½Cºï¼š
[Visual Basic] Execute* (ByVal connectionString As String, _ ByVal commandType As CommandType, _ ByVal commandText As String) Execute* (ByVal connectionString As String, _ ByVal commandType As CommandType, _ ByVal commandText As String, _ ByVal ParamArray commandParameters() As SqlParameter) Execute* (ByVal connectionString As String, _ ByVal spName As String, _ ByVal ParamArray parameterValues() As Object) [C#] Execute* (string connectionString, CommandType commandType, string commandText) Execute* (string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters) Execute* (string connectionString, string spName, params object[] parameterValues)注æ„åQ?/strong>ExecuteXmlReader 䏿”¯æŒè¿žæŽ¥å—½W¦ä¸²åQŒå› 为:ä¸?SqlDataReader 对象ä¸åŒåQ?strong>XmlReader 对象åœ?XmlReader 关闿—¶æ²¡æœ‰æä¾›è‡ªåЍ关é—连接的æ–ÒŽ³•。如果客æˆïL«¯ä¼ 递了˜qžæŽ¥å—符ä¸ÔŒ¼Œé‚£ä¹ˆå½“客æˆïL«¯å®Œæˆå¯?XmlReader çš„æ“作åŽåQŒå°†æ— 法关é—ä¸?XmlReader 相关è”çš„˜qžæŽ¥å¯¹è±¡ã€?/blockquote>
通过å‚è€?Data Access Application Block ½E‹åºé›†åƈ导入 Microsoft.ApplicationBlocks.Data 命å½Iºé—´åQŒæ‚¨å¯ä»¥è½ÀL¾¾~–写使用ä»ÖM½•一¿U?SqlHelper ¾cÀL–¹æ³•的代ç åQŒå¦‚下é¢çš„代ç 示例所½Cºï¼š
[Visual Basic] Imports Microsoft.ApplicationBlocks.Data [C#] using Microsoft.ApplicationBlocks.Data;导入命å½Iºé—´åŽï¼Œæ‚¨å¯ä»¥è°ƒç”¨ä“Qä½?Execute* æ–ÒŽ³•åQŒå¦‚下é¢çš„代ç 示例所½Cºï¼š
[Visual Basic] Dim ds As DataSet = SqlHelper.ExecuteDataset( _ "SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;", _ CommandType.Text, "SELECT * FROM Products") [C#] DataSet ds = SqlHelper.ExecuteDataset( "SERVER=DataServer;DATABASE=Northwind;INTEGRATED SECURITY=sspi;", _ CommandType.Text, "SELECT * FROM Products");使用 SqlHelperParameterCache ¾cÈ®¡ç†å‚æ•?/h3>
SqlHelperParameterCache ¾cÀL供了三ç§å¯ä»¥ç”¨æ¥½Ž¡ç†å‚数的公共共享方法。它们是åQ?
- CacheParameterSet。用于将 SqlParameters 数组å˜å‚¨åˆ°ç¼“å˜ä¸ã€?
- GetCachedParameterSet。用于检索缓å˜çš„傿•°æ•°ç»„的副本ã€?
- GetSpParameterSet。一¿Ué‡è½½æ–¹æ³•,用于‹‚€ç´¢æŒ‡å®šå˜å‚¨è¿‡½E‹çš„ç›¸åº”å‚æ•°åQˆé¦–先查询一‹Æ¡æ•°æ®åº“åQŒç„¶åŽç¼“å˜ç»“æžœä»¥ä¾¿å°†æ¥æŸ¥è¯¢ï¼‰ã€?
¾~“å˜å’Œæ£€ç´¢å‚æ•?/h4>
通过使用 CacheParameterSet æ–ÒŽ³•åQŒå¯ä»¥ç¼“å?SqlParameter å¯¹è±¡æ•°ç»„ã€‚æ¤æ–ÒŽ³•通过ž®†è¿žæŽ¥å—½W¦ä¸²å’Œå‘½ä»¤æ–‡æœ¬è¿žæŽ¥è“væ¥åˆ›å»ÞZ¸€ä¸ªé”®åQŒç„¶åŽå°†å‚数数组å˜å‚¨åœ?Hashtable ä¸ã€?/p>
è¦ä»Ž¾~“å˜ä¸æ£€ç´¢å‚敎ͼŒè¯·ä‹Éç”?GetCachedParameterSet æ–ÒŽ³•ã€‚æ¤æ–ÒŽ³•ž®†è¿”回一ä¸?SqlParameter 对象数组åQŒè¿™äº›å¯¹è±¡å·²ä½¿ç”¨¾~“å˜åQˆä¸Žä¼ 递给该方法的˜qžæŽ¥å—符串和命ä×o文本相对应)ä¸çš„傿•°çš„å¿U°ã€å€¹{€æ–¹å‘和数殾cÕdž‹½{‰è¿›è¡Œäº†åˆå§‹åŒ–ã€?/p>
注æ„åQ?/strong>ç”¨ä½œå‚æ•°é›†çš„键的˜qžæŽ¥å—符串通过½Ž€å•çš„å—符串比较进行匹é…。用于从 GetCachedParameterSet 䏿£€ç´¢å‚æ•°çš„˜qžæŽ¥å—符串必™åÖM¸Žç”¨æ¥é€šè¿‡ CacheParameterSet æ¥å˜å‚¨è¿™äº›å‚æ•°çš„˜qžæŽ¥å—符串完全相åŒã€‚è¯æ³•ä¸åŒçš„˜qžæŽ¥å—符串å³ä½¿è¯ä¹‰ç›¸åŒï¼Œä¹Ÿä¸ä¼šè¢«è®¤äؓ是匹é…çš„ã€?/blockquote>
ä»¥ä¸‹ä»£ç æ˜„¡¤ºäº†å¦‚何ä‹Éç”?SqlHelperParameterCache ¾cÀL¥¾~“å˜å’Œæ£€ç´?Transact-SQL è¯å¥çš„傿•°ã€?/p>
[Visual Basic] ' åˆå§‹åŒ–连接嗽W¦ä¸²å’Œå‘½ä»¤æ–‡æœ? ' 它们ž®†æž„æˆç”¨æ¥å˜å‚¨å’Œ‹‚€ç´¢å‚æ•°çš„é”? Const CONN_STRING As String = _ "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;" Dim sql As String = _ "SELECT ProductName FROM Products " + _ "WHERE Category=@Cat AND SupplierID = @Sup" ' ¾~“å˜å‚æ•° Dim paramsToStore(1) As SqlParameter paramsToStore(0) = New SqlParameter("@Cat", SqlDbType.Int) paramsToStore(1) = New SqlParameter("@Sup", SqlDbType.Int) SqlHelperParameterCache.CacheParameterSet(CONN_STRING, _ sql, _ paramsToStore) ' 从缓å˜ä¸‹‚€ç´¢å‚æ•? Dim storedParams(1) As SqlParameter storedParams = SqlHelperParameterCache.GetCachedParameterSet( _ CONN_STRING, sql) storedParams(0).Value = 2 storedParams(1).Value = 3 ' 在命令ä¸ä½¿ç”¨å‚æ•° Dim ds As DataSet ds = SqlHelper.ExecuteDataset(CONN_STRING, _ CommandType.Text, _ sql, storedParams) [C#] // åˆå§‹åŒ–连接嗽W¦ä¸²å’Œå‘½ä»¤æ–‡æœ? // 它们ž®†æž„æˆç”¨æ¥å˜å‚¨å’Œ‹‚€ç´¢å‚æ•°çš„é”? const string CONN_STRING = "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"; string spName = "SELECT ProductName FROM Products " + "WHERE Category=@Cat AND SupplierID = @Sup"; // ¾~“å˜å‚æ•° SqlParameter[] paramsToStore = new SqlParameter[2]; paramsToStore[0] = New SqlParameter("@Cat", SqlDbType.Int); paramsToStore[1] = New SqlParameter("@Sup", SqlDbType.Int); SqlHelperParameterCache.CacheParameterSet(CONN_STRING, sql, paramsToStore); // 从缓å˜ä¸‹‚€ç´¢å‚æ•? SqlParameter storedParams = new SqlParameter[2]; storedParams = SqlHelperParameterCache.GetCachedParameterSet( CONN_STRING, sql); storedParams(0).Value = 2; storedParams(1).Value = 3; // 在命令ä¸ä½¿ç”¨å‚æ•° DataSet ds; ds = SqlHelper.ExecuteDataset(CONN_STRING, CommandType.StoredProcedure, sql, storedParams);‹‚€ç´¢å˜å‚¨è¿‡½E‹å‚æ•?/h4>
SqlHelperParameterCache ˜q˜æä¾›äº†é’ˆå¯¹ç‰¹å®šå˜å‚¨˜q‡ç¨‹‹‚€ç´¢å‚æ•°æ•°¾l„çš„æ–ÒŽ³•。一¿Uåä¸?GetSpParameterSet çš„é‡è½½æ–¹æ³•æä¾›äº†æ¤åŠŸèƒ½ï¼Œå®ƒåŒ…å«ä¸¤¿U实现。该æ–ÒŽ³•ž®è¯•从缓å˜ä¸‹‚€ç´¢ç‰¹å®šå˜å‚¨è¿‡½E‹çš„傿•°ã€‚å¦‚æžœè¿™äº›å‚æ•°å°šæœªè¢«¾~“å˜åQŒåˆ™ä½¿ç”¨ .NET çš?SqlCommandBuilder ¾cÖM»Žå†…部‹‚€ç´¢ï¼Œòq¶å°†å®ƒä»¬æ·ÕdŠ åˆ°ç¼“å˜ä¸åQŒä»¥ä¾¿ç”¨äºŽå޾lçš„‹‚€ç´¢è¯·æ±‚。然åŽï¼Œä¸ºæ¯ä¸ªå‚æ•°æŒ‡å®šç›¸åº”çš„å‚æ•°è®„¡½®åQŒæœ€åŽå°†˜q™äº›å‚数以数¾l„åÅžå¼è¿”å›žç»™å®¢æˆ·ç«¯ã€‚ä»¥ä¸‹ä»£ç æ˜¾½CÞZº†å¦‚何‹‚€ç´?Northwind æ•°æ®åº“ä¸ SalesByCategory å˜å‚¨˜q‡ç¨‹çš„傿•°ã€?/p>
[Visual Basic] ' åˆå§‹åŒ–连接嗽W¦ä¸²å’Œå‘½ä»¤æ–‡æœ? ' 它们ž®†æž„æˆç”¨æ¥å˜å‚¨å’Œ‹‚€ç´¢å‚æ•°çš„é”? Const CONN_STRING As String = _ "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;" Dim spName As String = "SalesByCategory" ' ‹‚€ç´¢å‚æ•? Dim storedParams(1) As SqlParameter storedParams = SqlHelperParameterCache.GetSpParameterSet( _ CONN_STRING, spName) storedParams(0).Value = "Beverages" storedParams(1).Value = "1997" ' 在命令ä¸ä½¿ç”¨å‚æ•° Dim ds As DataSet ds = SqlHelper.ExecuteDataset(CONN_STRING, _ CommandType.StoredProcedure, _ spName, storedParams) [C#] // åˆå§‹åŒ–连接嗽W¦ä¸²å’Œå‘½ä»¤æ–‡æœ? // 它们ž®†æž„æˆç”¨æ¥å˜å‚¨å’Œ‹‚€ç´¢å‚æ•°çš„é”? const string CONN_STRING = "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"; string spName = "SalesByCategory"; // ‹‚€ç´¢å‚æ•? SqlParameter storedParams = new SqlParameter[2]; storedParams = SqlHelperParameterCache.GetSpParameterSet( CONN_STRING, spName); storedParams[0].Value = "Beverages"; storedParams[1].Value = "1997"; // 在命令ä¸ä½¿ç”¨å‚æ•° DataSet ds; ds = SqlHelper.ExecuteDataset(CONN_STRING, CommandType.StoredProcedure, spName, storedParams);内部设计
Data Access Application Block 包å«äº†å®Œæ•´çš„æºä»£ç 和有关其设计的¾l¼åˆæŒ‡å—。本节介¾l有关主è¦å®žçŽ°çš„è¯¦ç»†ä¿¡æ¯ã€?/p>
SqlHelper ¾cÕd®žçŽ°è¯¦¾l†ä¿¡æ?/h3>
SqlHelper ¾cÈ”¨äºŽé€šè¿‡ä¸€¾l„陿€æ–¹æ³•楞®è£…æ•°æ®è®‰K—®åŠŸèƒ½ã€‚è¯¥¾cÖM¸èƒ½è¢«¾l§æ‰¿æˆ–实例化åQŒå› æ¤å°†å…¶å£°æ˜Žäؓ包å«ä¸“ç”¨æž„é€ å‡½æ•°çš„ä¸å¯¾l§æ‰¿¾c…R€?/p>
åœ?SqlHelper ¾cÖM¸å®žçŽ°çš„æ¯¿U方法都æä¾›äº†ä¸€¾l„一致的é‡è²ã€‚è¿™æä¾›äº†ä¸€¿U很好的使用 SqlHelper ¾cÀL¥æ‰§è¡Œå‘½ä×o的模å¼ï¼ŒåŒæ—¶ä¸ºå¼€å‘äh员选择讉K—®æ•°æ®çš„æ–¹å¼æä¾›äº†å¿…è¦çš„絋zÀL€§ã€‚毿U方法的é‡è²éƒ½æ”¯æŒä¸åŒçš„æ–ÒŽ³•傿•°åQŒå› æ¤å¼€å‘äh员å¯ä»¥ç¡®å®šä¼ 递连接ã€äº‹åŠ¡å’Œå‚æ•°ä¿¡æ¯çš„æ–¹å¼ã€‚在 SqlHelper ¾cÖM¸å®žçŽ°çš„æ–¹æ³•åŒ…æ‹¬ï¼š
- ExecuteNonQueryã€‚æ¤æ–ÒŽ³•用于执行ä¸è¿”回ä“Q何行或值的命ä×o。这些命令通常用于执行数æ®åº“更斎ͼŒä½†ä¹Ÿå¯ç”¨äºŽè¿”回å˜å‚¨è¿‡½E‹çš„è¾“å‡ºå‚æ•°ã€?
- ExecuteReaderã€‚æ¤æ–ÒŽ³•用于˜q”回 SqlDataReader 对象åQŒè¯¥å¯¹è±¡åŒ…å«ç”±æŸä¸€å‘½ä×o˜q”回的结果集ã€?
- ExecuteDatasetã€‚æ¤æ–ÒŽ³•˜q”回 DataSet 对象åQŒè¯¥å¯¹è±¡åŒ…å«ç”±æŸä¸€å‘½ä×o˜q”回的结果集ã€?
- ExecuteScalarã€‚æ¤æ–ÒŽ³•˜q”回一个倹{€‚该值始¾lˆæ˜¯è¯¥å‘½ä»¤è¿”回的½W¬ä¸€è¡Œçš„½W¬ä¸€åˆ—ã€?
- ExecuteXmlReaderã€‚æ¤æ–ÒŽ³•˜q”回 FOR XML 查询çš?XML 片段ã€?
除了˜q™äº›å…¬å…±æ–ÒŽ³•外,SqlHelper ¾c»è¿˜åŒ…å«ä¸€äº›ä¸“用函敎ͼŒç”¨äºŽ½Ž¡ç†å‚æ•°å’Œå‡†å¤‡è¦æ‰§è¡Œçš„å‘½ä»¤ã€‚ä¸½Ž¡å®¢æˆïL«¯è°ƒç”¨ä»€ä¹ˆæ ·çš„æ–¹æ³•实玎ͼŒæ‰€æœ‰å‘½ä»¤éƒ½é€šè¿‡ SqlCommand å¯¹è±¡æ¥æ‰§è¡Œã€‚在 SqlCommand 对象能够被执行之å‰ï¼Œæ‰€æœ‰å‚数都必须æ·ÕdŠ åˆ?Parameters 集åˆä¸ï¼Œòq¶ä¸”å¿…é¡»æ£ç¡®è®„¡½® Connectionã€?strong>CommandTypeã€?strong>CommandText å’?Transaction 属性ã€?strong>SqlHelper ¾cÖM¸çš„专用函æ•îC¸»è¦ç”¨äºŽæä¾›ä¸€¿U一致的方å¼åQŒä»¥ä¾¿å‘ SQL Server æ•°æ®åº“å‘出命令,而ä¸è€ƒè™‘客户端应用程åºè°ƒç”¨çš„é‡è²æ–ÒŽ³•实现。SqlHelper ¾cÖM¸çš„专用实用程åºå‡½æ•°åŒ…括:
- AttachParametersåQšè¯¥å‡½æ•°ç”¨äºŽž®†æ‰€æœ‰å¿…è¦çš„ SqlParameter 对象˜qžæŽ¥åˆ°æ£åœ¨è¿è¡Œçš„ SqlCommandã€?
- AssignParameterValuesåQšè¯¥å‡½æ•°ç”¨äºŽä¸?SqlParameter 对象赋倹{€?
- PrepareCommandåQšè¯¥å‡½æ•°ç”¨äºŽå¯¹å‘½ä»¤çš„属性(如连接ã€äº‹åŠ¡çŽ¯å¢ƒç‰åQ‰è¿›è¡Œåˆå§‹åŒ–ã€?
- ExecuteReaderåQšæ¤ä¸“用 ExecuteReader 实现用于通过适当çš?CommandBehavior 打开 SqlDataReader 对象åQŒä»¥ä¾¿æœ€æœ‰æ•ˆåœ°ç®¡ç†ä¸Žé˜…读器关è”çš„˜qžæŽ¥çš„æœ‰æ•ˆæœŸã€?
SqlHelperParameterCache ¾cÕd®žçŽ°è¯¦¾l†ä¿¡æ?/h3>
傿•°æ•°ç»„¾~“å˜åœ¨ä¸“ç”?Hashtable ä¸ã€‚从¾~“å˜ä¸æ£€ç´¢çš„傿•°˜q›è¡Œå†…部å¤åˆ¶åQŒè¿™æ ·å®¢æˆïL«¯åº”用½E‹åºèƒ½å¤Ÿæ›´æ”¹å‚æ•°å€ég»¥åŠè¿›è¡Œå…¶ä»–æ“作,而ä¸ä¼šåª„å“缓å˜çš„傿•°æ•°ç»„。专用共享函æ•?CloneParameters å¯ä»¥å®žçްæ¤ç›®çš„ã€?/p>
常è§é—®é¢˜
æ¤ç‰ˆæœ¬åŒ…å«å“ªäº›æ–°å¢žåŠŸèƒ½ï¼Ÿ
ä¸?Data Access Application Block Beta 2.0 版本相比åQŒè¯¥ RTM 版本包å«ä»¥ä¸‹æ–°å¢žåŠŸèƒ½å’Œå˜åŒ–:
- SqlHelper ¾cÀL–¹æ³•的事务型é‡è½½ä¸å†éœ€è¦?SqlConnection 傿•°ã€‚在æ¤ç‰ˆæœ¬ä¸åQŒè¿žæŽ¥ä¿¡æ¯ä»Ž SqlTransaction å¯¹è±¡ä¸æ´¾ç”Ÿï¼Œå› æ¤ä¸å¿…在方法ç¾åä¸åŒ…å« SqlConnection å¯¹è±¡å‚æ•°ã€?
- 现在åQ?strong>GetSpParameterSet æ–ÒŽ³•使用 ADO.NET CommandBuilder ¾cÈš„ DeriveParameters æ–ÒŽ³•æ¥ç¡®å®šå˜å‚¨è¿‡½E‹æ‰€éœ€è¦çš„傿•°ã€‚è¿™æ¯?Beta 2.0 版本ä¸ç›´æŽ¥é€šè¿‡æŸ¥è¯¢æ•°æ®åº“楋‚€ç´¢ä¿¡æ¯çš„æ•ˆçŽ‡æ›´é«˜ã€?
å¯ä»¥ä½¿ç”¨ XCOPY 部çÖvæ–ÒŽ³•æ¥éƒ¨¾|?Data Access Application Block ½E‹åºé›†å—åQ?/h3>
å¯ä»¥ã€‚Microsoft.ApplicationBlocks.Data.dll ½E‹åºé›†åœ¨¾~–译åŽå¯ä»¥ä‹Éç”?XCOPY ˜q›è¡Œéƒ¨çÖvã€?/p>
什么时候应该ä‹Éç”?ExecuteDataset æ–ÒŽ³•åQŒä»€ä¹ˆæ—¶å€™åº”该ä‹Éç”?ExecuteReader æ–ÒŽ³•åQ?/h3>
˜q™ä¸ªé—®é¢˜å®žé™…上是什么时候应该返å›?DataSet 对象ä¸çš„多个数æ®è¡Œï¼Œä»€ä¹ˆæ—¶å€™åº”该ä‹Éç”?DataReaderã€‚ç”æ¡ˆå–决于您的应用½E‹åºçš„特定需è¦ï¼Œä»¥åŠæ‚¨åœ¨ç‰|´»æ€§å’ŒåŽŸå§‹æ€§èƒ½ä¹‹é—´çš„å–èˆã€‚DataSet 为您æä¾›æ•°æ®çš„絋zÈš„且æ–å¼€˜qžæŽ¥çš„å…³¾p»è§†å›¾ï¼Œè€?DataReader 为您æä¾›æ€§èƒ½å“è¶Šçš„ã€åªè¯Èš„ã€ä»…å‘å‰å…‰æ ‡ã€‚有å…?DataSet å’?DataReader çš„å…¨é¢æ¯”较,请å‚é˜?Data Access Architecture GuideåQˆè‹±æ–‡ï¼‰ã€?/p>
如何使用 ExecuteDataset ˜q”回包å«å¤šä¸ªè¡¨çš„æ•°æ®é›†ï¼Ÿ
通过创å¾ä¸€ä¸ªå¯ä»¥è¿”回多个行集的å˜å‚¨˜q‡ç¨‹åQˆé€šè¿‡æ‰§è¡Œå¤šä¸ª SELECT è¯å¥æˆ–者对其他å˜å‚¨˜q‡ç¨‹˜q›è¡ŒåµŒå¥—调用åQ‰ï¼Œòq¶ä‹Éç”?ExecuteDataset æ–ÒŽ³•执行该过½E‹ï¼Œæ‚¨å¯ä»¥æ£€ç´¢åŒ…å«å¤šä¸ªè¡¨çš„æ•°æ®é›†ã€?/p>
例如åQŒå‡è®¾æ‚¨çš„æ•°æ®åº“包å«ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹ã€?/p>
CREATE PROCEDURE GetCategories AS SELECT * FROM Categories GO CREATE PROCEDURE GetProducts AS SELECT * FROM Products您å¯ä»¥åˆ›å»ÞZ¸€ä¸ªä¸»å˜å‚¨˜q‡ç¨‹æ¥å¯¹˜q™äº›˜q‡ç¨‹˜q›è¡ŒåµŒå¥—调用åQŒå¦‚下é¢çš„代ç 示例所½Cºã€?/p>
CREATE PROCEDURE GetCategoriesAndProducts AS BEGIN EXEC GetCategories EXEC GetProducts END使用 ExecuteDataset æ–ÒŽ³•执行æ¤ä¸»å˜å‚¨˜q‡ç¨‹ž®†è¿”回一ä¸?DateSetåQŒå…¶ä¸åŒ…å«ä¸¤ä¸ªè¡¨åQšä¸€ä¸ªè¡¨åŒ…å«åˆ†ç±»æ•°æ®åQŒå¦ä¸€ä¸ªè¡¨åŒ…å«äº§å“æ•°æ®ã€?/p>
注æ„åQ?/strong>ExecuteDataset æ–ÒŽ³•䏿供䨓˜q”回的表指定自定义å¿U°çš„æ–ÒŽ³•。第一个表的编å·å§‹¾lˆäØ“ 0åQŒå¿UîCØ“ TableåQŒç¬¬äºŒä¸ªè¡¨çš„¾~–å·ä¸?1åQŒå¿UîCØ“ Table1åQŒä¾æ¤ç±»æŽ¨ã€?/blockquote>
˜q˜æœ‰å…¶ä»–的应用程åºå—å—?
Data Access Application Block 是峞®†å‘å¸ƒçš„å‡ ä¸ªåº”ç”¨½E‹åºå—之一。这些应用程åºå—å¯ä»¥è§£å†³å¼€å‘äh员在ä¸åŒ™å¹ç›®ä¸é‡åˆ°çš„å…±åŒé—®é¢˜ã€‚它们å¯ä»¥å¿«é€Ÿæ–¹ä¾¿åœ°æ’å…¥åˆ?.NET 应用½E‹åºä¸ã€?/p>
å馈和支æŒ?/h2>
如果您对 Data Access Application Block 有ä“Qä½•é—®é¢˜ã€æ„è§å’Œå»ø™®®åQŒè¯·å?devfdbck@microsoft.com å‘é€ç”µåé‚®ä»Óž¼Œæˆ‘们ž®†åŠæ—¶æä¾›å馈ã€?/p>
Application Blocks for .NET 旨在å助开å?.NET 分布å¼åº”用程åºã€‚示例代ç å’Œæ–‡æ¡£éƒ½æŒ‰åŽŸæ ·æä¾›ã€‚å°½½Ž¡å·²¾l过‹¹‹è¯•òq¶è¢«è®¤äؓ是稳定的代ç é›†ï¼Œä½†æˆ‘ä»¬åÆˆä¸è±¡ä¼ 统çš?Microsoft 产å“é‚£æ ·å¯¹å…¶æä¾›æ”¯æŒã€?/p>
我们˜q˜åˆ›å»ÞZº†ä¸€ä¸ªæ–°é—È»„åQŒå¯ä»¥å¸®åŠ©æ‚¨ä½¿ç”¨ Application Blocks for .NETåQ?NET 应用½E‹åºå—)。您å¯ä»¥é€šè¿‡æ–°é—»¾l„åœ¨è”æœºçš„开放论å›ä¸å‘åŒè¡Œã€åŒäº‹å’Œ Microsoft 支æŒä¸“家咨询ã€?/p>
å…¶ä»–äºÞZ¹Ÿå¯ä»¥ä»Žæ‚¨çš„问题和评论ä¸èŽ·ç›Šï¼Œæˆ‘ä»¬çš„å¼€å‘å°¾l„å°†æ¯å¤©æŸ¥çœ‹æ–°é—»¾l„:
æ–°é—»¾l„:åŸÞZºŽ Web 的读è€?br />http://msdn.microsoft.com/newsgroups/loadframes.asp?icp=msdn&slcid=us&newsgroup=microsoft.public.dotnet.distributed_appsåQˆè‹±æ–‡ï¼‰æ–°é—»¾l„:NNTP 读è€?br />news://msnews.microsoft.com/microsoft.public.dotnet.distributed_appsåQˆè‹±æ–‡ï¼‰
您想å¦ä¹ 和利ç”?.NET 的功能å—åQŸæ¬¢˜qŽæ‚¨ä¸?Microsoft Technology Centers çš„æŠ€æœ¯ä¸“å®¶åÆˆè‚©å·¥ä½œï¼Œæ‚¨å°†å¦åˆ°æœ€å¥½çš„å¼€å‘ç»éªŒã€‚有兌™¯¦¾l†ä¿¡æ¯ï¼Œè¯¯‚®¿é—?http://www.microsoft.com/business/services/mtc.aspåQˆè‹±æ–‡ï¼‰ã€?/p>
æ‚¨éœ€è¦æ›´å¤šçš„帮助å—?误‚®¿é—®æ–°å¢žçš„å®¢æˆ·æ”¯æŒæœåŠ¡ Advisory ServicesåQŒè¯¥è§£å†³æ–ÒŽ¡ˆå¯ä»¥æ»¡èƒö您å°è§„模的咨询需è¦ã€‚有å…?Advisory Services 的详¾l†ä¿¡æ¯ï¼Œè¯¯‚®¿é—?http://support.microsoft.com/default.aspx?id=fh;EN-US;advisoryserviceåQˆè‹±æ–‡ï¼‰ã€?/p>
更多信æ¯
Data Access Application Block çš„è®¾è®¡å’Œå¼€å‘æ˜¯å»ºç«‹åœ?Data Access in .NET Architecture GuideåQˆè‹±æ–‡ï¼‰ä¸è®¨è®ºçš„æœ€ä½›_¼€å‘ç»éªŒå’Œé€šç”¨è®¾è®¡åŽŸåˆ™åŸºç¡€ä¹‹ä¸Šçš„ã€‚è¯·é˜…è¯»è¯¥æŒ‡å—,以了解有å…Ïx•°æ®è®¿é—®çš„详细信æ¯ã€?/p>