2009年12月31日 星期四

C# 日曆(Calendar)日期多選

        protected void btnSelect_Click(object sender, EventArgs e)
{
int current_year = MyCalendar.VisibleDate.Year;
int current_month = MyCalendar.VisibleDate.Month;
DateTime BeginningDate = new DateTime(current_year, current_month, 10);
DateTime EndingDate = new DateTime(current_year, current_month, 20);

MyCalendar.SelectedDates.Clear();

// 選取一段日期範圍
MyCalendar.SelectedDates.SelectRange(BeginningDate, EndingDate);
CountSelection();
}
MyCalendar.SelectedDates.SelectRange(BeginningDate, EndingDate);

C# 動態套用CSS樣式表

<asp:DropDownList ID="ddlToRun" runat="server" AutoPostBack="True" onselectedindexchanged="ddlToRun_SelectedIndexChanged" />

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Computer MyComputer = new Computer();

// 取得實體目錄。
string strPhysicalDir = MyComputer.FileSystem.GetParentPath(Server.MapPath("/CH2"));

// 取得檔案列表。
FileInfo[] DemoWebForms =
MyComputer.FileSystem.GetDirectoryInfo(strPhysicalDir).GetFiles("*.css");


// 這是 LINQ
var CssFiles = from DemoWebFormFile in DemoWebForms select DemoWebFormFile.Name;

// 替下拉式清單方塊加入一個選項文字。
this.ddlToRun.Items.Add("選擇一個 CSS 樣式表");

// 將 .css 檔案名稱一一加入下拉式清單方塊中。
foreach (var x in CssFiles)
{
ddlToRun.Items.Add(x);
}
}
}

protected void ddlToRun_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlToRun.SelectedIndex > 0)
{
string choice = ddlToRun.SelectedItem.ToString();

if (Request.Browser.Browser.ToString() == "IE")
{
Response.Write("<link rel='stylesheet' type='text/css' href='" + choice + "'></link>");
}
}

2009年12月24日 星期四

home版xp安裝群組原則功能

home版的xp是沒有的只有專業版xp才有的

所以找到了一個方法
1、將XP專業版的「C:\WINDOWS\system32」文件夾中的gpedit.msc、fde.dll、gpedit.dll、gptext.dll、wsecedit.dll文件複製到HOME版的「C:\WINDOWS\system32」文件夾中。
2、在「開始--執行」中依次執行以下命令:「regsvr32 fde.dll」、「regsvr32 gpedit.dll」、「regsvr32 gptext.dll」、「regsvr32 wsecedit.dll」分別註冊這4個動態數據庫。
3、將XP專業版的「C:\WINDOWS\INF」文件夾中的所有*.adm文件複製替換到HOME版的「C:\WINDOWS\INF」文件夾中
這樣home的xp也就有群組原則的功能

C# My 載入文字檔的方法

using Microsoft.VisualBasic.Devices;
Microsoft.VisualBasic.Devices.Computer mycomputer = new Computer();
try
{
Literal2.Text = mycomputer.FileSystem.ReadAllText("D:\\WWW\\Allocation.txt");
}
catch (Exception ex)
{
Literal2.Text = ex.Message;
}

2009年12月23日 星期三

五種超難搞的使用者

或許範圍有所差別(僅限於企業內或者還包含企業外),或許電腦程度有所差別(最終使用者或者另一群IT人),IT人員應該都有面對使用者的經驗;當你面對某位或某些類型使用者的時候,是不是總有火冒三丈的衝動?先別急,ComputerWorld的文章《The 5 users you meet in hell (and one you'll find in heaven)》歸納出五種超難搞(以及一種理想夢幻)的使用者。

IT人應該最怕遇到「自認什麼都懂的使用者」,這種使用者可能只是知道一點點HTML、曾經重組過自己的硬碟--一次,但此後就自認是比你還懂得工程師,也經常不願遵守公司的政策或命令,有時還會經常跑去機房找你「討論」IT技術。為了凸顯自己的能力,自認什麼都懂的使用者最喜歡自己擅改電腦設定,或者自行下載、安裝公司不允許或不支援的軟體。這種半調子卻自認是工程師的使用者,常可能因為覺得自己很懂而勇於嘗試,但最後也往往會將事情搞的一團糟。不管這種使用者到底懂多少,如果違反公司政策或命令,就一定要處理,不然會招來更多同類使用者無視政策或命令;如同「破窗理論」,如果破窗剛出現時不處理,破窗就會被認為是允許的,屆時破窗一定會多的處理不完。

少年電腦狂」是「自認什麼都懂的使用者」兄弟,這兩種類型的使用者非常相似,差別是前者真的瞭解技術。因此比較容易溝通技術面的細節,而且也可以考慮發揮這類使用者的長處,讓他成為某個部門的電腦小老師(但還是要注意權限),或甚至納入IT部門。

相較之下,「什麼都不懂的使用者」是另一種極端,這種使用者會問你任意鍵是鍵盤上的那個按鍵。因為不懂,這種使用者比較不敢亂動電腦,但也因此經常詢問IT人或請IT人去幫他處理電腦問題。麻煩的是,這種使用者經常無法清楚描述問題,而且往往也聽不懂或看不懂你的回覆。面對這種使用者,IT人應該多點耐心,設身處地的站在對方的角度去看IT技術或產品,畢竟很多我們IT人習以為常的事物,對這類使用者都像是來自另一個星球,用對方能夠理解的語言去溝通,才能達到效果。

特權先生」應該是IT人很想避而遠之的使用者類型,尤其當週五下班之後,你已經一隻腳踏出辦公室了,就怕被特權先生召回。不過,處理特權先生的問題可能也是你表現自己、甚至封官晉爵的大好機會,因為特權先生或許就是你的主管;這種情況雖然只是辦公室階級文化的真實寫照,不過也別過頭而弄得自己像在逢迎拍馬。

有些使用者從不認為自己有任何責任,像這種「千錯萬錯都是你的錯的使用者」,總會把任何IT方面的問題--例如電腦的執行速度稍有變慢、沒收到電子郵件、或者自己忘了通行碼--當作他工作上的藉口,然後將責任推給IT部門。但是並不需要跟這種使用者槓上,只要依照公司政策、只要該作的都作了,只要無損IT部門的清譽,不需介入意氣之爭(介入反而可能正中下懷)。

不過話說回來,不只IT人不想遇到難搞的使用者,使用者也不想遇到難搞的IT人;身為IT人,你對自己的工作夠盡心、對技術夠熱情,你是使用者總會火冒三丈的IT人嗎?

轉自 [賴榮樞]的軟體資訊誌 http://www.goodman-lai.idv.tw/2008/04/blog-post.html

IT部門採用集權架構或分權架構的理由

IT部門究竟是該採用集權架構還是分權架構的爭議,似乎就像一部永遠也演不完的肥皂劇。其實集權架構或分權架構各有優缺點,而且也並非絕對的好(或不好),得視IT環境的情況而定。你和同事(或同學)大可以爭辯IT部門應該集權還是分權,但是在爭辯之前,更應該先瞭解兩者的優劣。TechRepublic有兩篇提及IT部門應該集權和分權五大理由的文章《Five reasons to centralize your IT department》、《Five reasons to decentralize your IT department》,或許就值得我們借鏡參考。

IT部門為什麼應該採取集權架構?理由之一是能避免資源重複,雖然分權架構可以加快部署、變更、解決問題,但如果未能做好橫向聯繫,往往也會導致資源分散,實作經驗也不易彼此共享。此外,可以提高安全性是集權架構的另一個理由,因為集權架構能讓IT人員更緊密的掌控數位資產,以獲得較高的安全性;相反的,分權架構就較難窺見所有資產的全貌,相對的安全性會成為挑戰。

集權架構也提供了整個企業的IT標準化運作機會,建立最佳實作,並能實作IT管理的準則。其中一種最普遍的標準化運作方式是利用ITIL,而為了要執行ITIL或其他標準化,整個過程必須有某些部分採取集權。除此之外,IT集權架構能擁有更專業的IT人才,因為若是將IT專才都集中在IT部門,等於是產生了雇用或訓練專業IT人才的機會,集權架構能負擔得起這種作法,因為這些資源能讓好幾個部門和業務單位共享。

避免資源重複以及IT標準化運算,意味著能降低成本,並且讓IT部門更有效率,而且集權架構幾乎也都是想要減少IT預算來節省成本的公司才做得到;相對來說,分權架構提供了快速反應的IT環境,能讓使用者或客戶感受到較強烈的IT協助,但這也意味著成本較高。

世事往往有一好就沒兩好:資源集中之後,反而會造成IT服務的瓶頸;想要降低成本,卻會增加IT服務的反應時間。難道分權架構就一定比較好嗎?不一定,但至少分權架構不會讓IT成為撙節預算的大目標,因為相關費用已經分攤到各單位,而且各個單位的IT人員與收益之間的關係也會更緊密,IT人員比較不會被犧牲掉。

分權架構能減少階層、減少內部鬥爭,因而能降低官僚氣息,讓力氣都用在正事。分權架構也能讓專案更快完成,例如若直接將架構師、工程師、開發者等IT人力放在業務單位,這些IT人力能直接與客戶面對面、直接得知客戶的需求或想法,對專案的完成很有幫助。同樣的,如果將IT人力直接放在業務單位,這些專才通常還可以獲得學習相關業務的機會,這也有助於IT與業務結合。

加快對使用者及客戶的回應,是採取分權架構最大的理由,因為要求不必上呈,IT人力可以就近處理而解決。因為業務單位的主管可以直接與IT專家共事而解決問題、變更專案、修改計畫、或進行採購,讓業務單位更為滿意IT的從旁就近協助。

分權架構和集權架構各有優劣,而且一方的優點往往會變成另一方的缺點,這種一體兩面的情況無法兩邊都討好。但無論是想採取集權架構還是分權架構,不妨都從這十項理由著手思考,先根據自己的企業環境、文化為前提,想想希望獲得什麼樣的結果、不能接受什麼樣的狀況,再從中取捨而找出最適合的作法。

轉自 [賴榮樞]的軟體資訊誌

如何面對裁員

公司裁員通常無預警,尤其是外商。多數人面臨「非自願性離職」,第一時間的情緒反應多是負面:震驚、難過、憤怒。專欄作家Ron Nutter在今年2月遭到解雇,震驚之餘,Nutter還是得面對明天。而在歷經了76天、85個工作機會、16次面談之後,Nutter找到了新工作,並且將自己遭逢裁員及求職的經驗,濃縮化成InfoWorld的文章《Twenty ways to survive a layoff》。

記下所記得的一切

首先,如果裁員已成事實,那麼從那一刻起,有太多事情需要處理,因此必須保持理智的頭腦,Nutter特別在文中提到,一定記下你所記得的一切。任何人遇到裁員的第一時間反應通常是震驚,然後陷入情緒的低潮。但唯有保持理智並以紙筆記下,才能清楚自己的權利與義務,例如薪資(付到何時)、遣散費、休假等。

而且這些事情的處理,可能不會在離開公司之前就結束,例如要留意後續的薪資是否入帳,健保續保的問題等。尤其,務必留意自己是否符合領取就業保險失業給付的條件,如果可以,也有許多手續流程要跑(相關資訊可參考勞委會勞工保險局網頁:http://www.bli.gov.tw/sub.asp?a=0005058)。

放開心並尋求家人支持

遭到解雇對多數人都相當負面,在離開舊工作、尋找新工作之前,Nutter認為不妨給自己幾天散心假。接著,找時間更新自己的工作履歷,不是制式文件的那種,而是記錄了自己完成過哪些專案工作。

新工作或許不是一時半刻就找到,失去工作就等於失去收入,因此Nutter在文中提醒必須做好節流,任何支出都必須謹慎,帳單更要詳細看過。如果還與其他家人同住,也應該讓他們知道狀況;家人的支持(甚至支援)此時便顯得重要不已,如果大家能共體時艱,甚至互相支援,會更容易走出失業的低潮。

除了線上的職業媒合網站,也別忘了其他的求職管道,例如把正在找工作的消息放上自己的部落格或即時通訊軟體,或者透過同事、甚至舊雇主、客戶詢問工作機會。面試新工作之前,也務必做足功課,例如瞭解新公司的規模、領域,甚至過去的記錄,而且不論上網搜尋,或者找找熟識的朋友詢問,都是很好的方法。

面試前應做足功課

此外Nutter在文中也建議,備妥個人履歷,更是面試新工作之前,非常重要的事情。千萬別因為一時的疏忽,才在面試時想不起自己參與過哪些專案或某個專案的細節。如果被發現準備不及--不論是忘了書面資料或面談時答不出來,都非常不利於面試成績。

在國內若請領就業保險失業給付,需回報求職記錄,但其實就算不需回報,如果能在找工作的時候,詳實記錄求職資料,對求職亦有助益。Nutter自己的經驗是以表格記錄每一項應徵工作的來源、日期、公司、職稱、內容、聯絡人及聯絡方式,並且記錄每一項工作的求職過程狀態,例如「寄出履歷」、「某日面試」、「已面試待通知」等,甚至也可以將前述的新公司資料記錄於此。

永不放棄

找工作也可以更為積極主動,有時候與其苦苦等候電話響,Nutter在文中建議不妨更為積極的撥給員工招募負責人。更重要的是必須記住「永不放棄」,找工作、申請就業保險失業給付等或許沒有想像中的順利,家人不見得能諒解你遭解雇,你更可能不甘心非自願性離職,但遇到不順心可以暫停一下、調適心情,不過無論如何,Nutter鼓勵失業者都應該抱著永不放棄的精神,期待更好的明天。

轉自 [賴榮樞]的軟體資訊誌 http://www.goodman-lai.idv.tw/2008/10/blog-post.html

五件應該告訴老闆及五件別跟老闆說的事情

身為IT專業人員,除了技術專業之外,深知辦公室文化對工作將更有幫助,尤其應該要能分辨老闆想要知道什麼事情。Computerworld有兩篇文章:《Five things you should always tell your boss》和《Five things you should never tell your boss》,分別提供了哪些事情應該要向老闆報告、哪些事情不用讓老闆知道的原則。這兩篇文章的內容,是與獲得Computerworld 2008 Premier 100 IT Leaders的IT主管訪談而來(也就是說,這十件事都是老闆的觀點)。

以下五件是應該告訴老闆的事情。

1.實情。任何主管都不喜歡美化問題、隱瞞事實、光說不練的員工,主管需要全盤的訊息,尤其不喜歡自己最後才知道真相。而且應該不加主觀評論的向老闆回報實情。

2.構想。縱使你的構想無關IT,但只要能改善業務、解決問題的建議,都是主管樂於聽到了。

3.需求。誠實的將工作上的需求告訴老闆。好的老闆會讓員工願意辛勤工作,原因往往在於老闆能讓員工樂在工作,而這有助於提高員工的工作士氣和生產力,並且留住員工。

4.。向老闆說「不」的確需要勇氣。在你說不的同時,最好還能提供各種替代建議給老闆,並且讓老闆知道各種建議的優缺點。

5.好消息。沒有人只想每天聽到專案出狀況、伺服器當機又不確定何時能恢復之類的壞消息,因此也別忘了向老闆報告好消息。

此外,以下五件事情就別跟老闆說囉。

1.所有與技術相關但與業務無關的事情。對IT主管來說,感興趣的是能協助組織業務推展並且讓企業員工事半功倍的IT技術。尤其,你務必在瞭解業務需求的情況下,再提出技術面的建議;別再不瞭解業務需求的情況下,就提出你的技術建議、甚至解決方案。

2.只有一種解決方案。IT人員有時候會有若干技術偏好,這無可厚非,但如果所有的狀況都只搬得出同一套解決方案,就不免遭人質疑你的技術廣度不夠。

3.其他同事的負面評價。最不該的尤其是所有的人都忙著要趕上落後的專案進度,但你卻在此時跟老闆說一些對工作無益的話,更容易讓老闆反感。這類的事情不是不能跟老闆說,但是物必要拿捏時機,最好是在老闆主動問你的時候再說。

4.不可能。或許真的不可能,但是在告訴老闆不可能之前,務必將你所面臨的挑戰告訴老闆,然後和老闆討論「如何克服這些挑戰」。如果能放棄心中的成見,就可能會對自己所能完成的深感訝異。因此,先別說不可能,而是先具體找出問題與挑戰,如果自己無法解決,試著讓你的老闆知道難題所在,而不是告訴老闆「不可能」。

5.意外驚喜。IT主管大多不喜歡驚喜,特別是煞風景或不愉快的意外。而且,最好別讓小問題變成大災難才讓老闆知道。

IT主管通常不會事事都想知道,但有些事情他又非得知道不可,因此你得「說該說的,不該說的就別說」。不過這並非簡單的事,除了需要敏銳的觀察力,也需要經驗,尤其你必須諳練自己所在的辦公室文化,才能做出恰當的判斷。

轉自 [賴榮樞]的軟體資訊誌 http://www.goodman-lai.idv.tw/2008/09/blog-post.html

IT管理的七原罪

天主教將人類的重大惡行分成7種:色慾(lust)、貪食(gluttony)、貪婪(avarice)懶惰(sloth)、暴怒(wrath)、妒忌(envy)、傲慢(pride);美國導演大衛芬奇也曾以7原罪作為題材拍過電影。但IT人可得留意,別在IT管理工作犯了InfoWorld《The 7 deadly sins of IT management》提及的7原罪。

渴望新技術的慾求(Lust for new technology)。需要最新版的硬體、軟體嗎?不見得,但許多IT人往往陷入新技術的迷思與追求,但卻忘了夠用即可的哲學。我們當然需要軟硬體設備來解決企業裡的各種營運所需,也不是說老舊的設備不能更新,但必須客觀的衡量新技術對自身企業營運究竟有多大的實用與價值。尤其規模越大的企業,IT環境往往越複雜,在牽一髮即動全身的情況下,縱使只是更新其中一個環節的軟體或硬體,可能還是會影響整個企業營運;就算升級成功,也要估算整個升級的成本划不划算。

將資訊據為己有(Information gluttony)。許多IT人會以為只要緊握某些重要資訊,就能保住自己的飯碗,但實際並不然,甚至可能正好相反。如果全公司只有某個人知道整個網路架構的核心細節,這豈不是讓公司的IT環境陷嚴重的失衡!此外,還有些IT主管會不斷的攬專案(或者不會拒絕),讓IT部門總得將每個專案視為緊急,卻無法分出人力處理真正緊急的專案。

人心不足的貪婪導致專案失敗(Avarice as an action item)。IT專案失敗的原因,通常是因為傲慢與貪婪的致命結合,再加上:開出不切實際的需求企畫書的傲慢客戶、明知不可行的系統整合商(SI)和顧問、夾在中間的技術提供者。系統整合商到底該直接告訴客戶專案注定會失敗而放棄白花花的銀子不賺,還是硬著頭皮繼續做,做到超出原本預計的工時和預算?因此,要避免專案超時、超支,合約必須規範成功的誘因,例如明訂提早完工的獎勵,以及超時、超支的罰則。

怠惰的工作心態(Slothful approaches to IT)。多數屬於事務性的工作做久之後,容易流於反射動作,許多工作做久之後,也會因疲乏而缺少更積極的作為,甚至抱了多一事不如少一事的心態,懶得作為;有些IT工作也會如此。這種工作心態沒有先考慮「做對的事」,只想要「把事情做對」,甚至敷衍的只想「把事情做完」。不只是IT工作,積極主動的態度比能力更重要,而且應該比你的老闆更主動、比你的競爭者更積極;主動的態度不只能精進工作能力,也會讓你有用心盡力的工作表現。

妒忌導致內鬥(In-house envy)。常常酸言酸語的見不得別人好嗎?這明顯犯了妒忌;會義憤填膺的指責別人嗎?這也可能是出於妒忌。有些妒忌很明顯,有些則會披著義憤填膺的外衣而狀似正義。如何分辨假正義、真嫉妒?就將他曾大肆批評的好處給他,如果他接受並沈溺其中,就是假正義了。妒忌別人就不會珍惜自己所擁有的及該做的,一旦妒忌之火越燃越大,不只自己的正事不做,還是妨礙別人做正事,到頭來公司無異養了一群只會咬破布袋的老鼠。

發飆不能解決問題(Wrath management)。暴怒只會凝結氣氛、讓對方下不了台,接著不是引起兩造對立,就是讓對方悶在心裡。主管公開發飆更不妥,拍桌罵人只能發洩情緒,並且促使大家絞盡腦汁想出自保、推諉的對策。

傲慢(Pride creep)。不論是傲慢、驕傲、還是自大,都會蒙蔽IT人的心智,甚至毀掉一個人或一家公司。以為自己知道或做得到,卻因為傲慢自大的錯估形勢,而導致全盤皆墨;甚至還放不下身段,不願承認錯誤。「滿招損、謙受益」,IT人必須吞下驕傲,專案成功並非一人可為,也不會只是單一部門的功勞;專案失敗亦然。

轉自 [賴榮樞]的軟體資訊誌 http://www.goodman-lai.idv.tw/2009/01/it.html

C#如何無條件進位和無條件捨去?

無條件進位=>Math.Ceiling(1.2) ==>2.0
無條件捨去=>Math.Floor(1.2) ==> 1.0

2009年12月22日 星期二

之前可以正常播放,但更新微軟修正程式後無法撥放時,要如何處理?

確認IE瀏覽器的版本
(1)從瀏覽器上方的工具列做確認:說明→關於Interner Explorer
(2)若你的瀏覽器是以下版本是:8.0 6001.18828

請手動以下步驟做修改。
(1)從瀏覽器上方的工具列:工具→網際網路選項
(2)請取消勾選「啟用受保護程式(需要重新啟動nterner Explorer)」,並勾選「確定」

若想下載最新「影音播放器(Windows Media Player)」版本或「新版 Internet Explorer 瀏覽器」時,該怎麼解決?

可至 微軟官網,下載安裝:
- 下載 Windows Media Player 11 for Windows XP
- 下載 Windows Media Player 10 for Windows XP
- 下載 Windows Media Player 11 for Windows XP

Internet Explorer 7: 官方下載 直接下載
Internet Explorer 8: 官方下載

Firefox 網路瀏覽器 2.0.0.7 官方 直接下載

Opera 網路瀏覽器 9.23 官方 直接下載

若想使用「火狐(Firefox)」瀏灠器播放影音媒體時,該怎麼解決?(目前僅適用 Windows 作業平台)

請至 Firefox Add-ons官網,下載並安裝 IE Tab Plug-in 軟體
- 下載 IE Tab 1.5.20080618 (適用版本:Firefox: 3.0 – 3.0.*)
- 下載 IE Tab 1.3.3.20070528 (適用版本:Firefox: 1.5 – 2.0.0.*)

安裝完成後,請於網頁內按下「滑鼠右鍵」>>「用 IE Tab 檢視本頁」,再次重新播放媒體即可:【顯示圖示】

當出現「由於不支援指定的通訊協定,Windows Media Player無法播放檔案。若您是在「開啟URL」對話方塊中輸入URL,請嘗試使用其他傳輸通訊協定 (例如: "http:" 或 "rtsp:")。」錯誤訊息,該怎麼解決?

若發生"由於不支援指定的通訊協定,Windows Media Player無法播放檔案。",通常代表您系統 "有安裝其它影音播放軟體"(如:K-Lite Codec Pack),而該播放軟體會自動修改Windows Media Player內預設的設定值,造成 mms stream 無法正常播放,請依照下列步驟將設定回復後,即可正常播放。【顯示圖示】

- 請您開啟影音播放器( [開始] > [程式集] > [附屬應用程式] > [娛樂] > [Windows Media Player] )後,按下功能表上的「工具」>>「選項」>>「網路」內 [串流處理通訊協定] 區域,請將「多點傳送(M)」/「UDP(U)」/「TCP(T)」/「HTTP(H)」等選項勾選,並按下對話盒下方「確定」鍵後(讓設定變更生效),再次重新播放媒體即可。

WindowsMediaPlayer 數位版權管理(DRM)個別化元件,因而導致無法正常收看

若發生"「影音安全性」版本需求不符",可能是您系統內 WindowsMediaPlayer 需要更新數位版權管理(DRM)個別化元件,因而導致無法正常收看,請依照下列步驟安裝後,即可正常播放。

- 系統將自動帶出 「Microsoft 安全性元件升級網站」,按下「Upgrade」鍵後進行安全性元件升級。
- 系統將自動帶出升級對話盒,請按下「升級」鍵後,自動下載升級安全性元件。
- 安全性元件升級網頁顯示「升級完成」,請關閉該頁,重啟電腦並成功取得授權後,即可正常播放。

當出現「用戶端屬性元件」失效訊息(錯誤代碼:-2146823281;'null'是null或不是一個物件),該怎麼解決?

若發生"錯誤代碼:-2146823281;'null'是null或不是一個物件",可能是您系統內 "未安裝" 或 "已停用" 該授權所需的DRM元件,請依照下列步驟安裝後,即可正常播放。

原因(一): 未安裝DRM元件 (※ 網址下方 "看的到" 提示安裝 ActiveX 控制項訊息)
- 於瀏灠器網址下方: 點選「來自 'Microsoft Corporation' 的 'DRM ActiveX Network Object'」連結並按下滑鼠右鍵。
- 請選擇「執行 ActiveX 控制項(C)」項目。
- 系統將自動帶出 " 您是否要執行此 ActiveX 控制項?" 對話盒,按下「執行(R)」鍵並成功取得授權後,即可正常播放。

原因(二): 已停用DRM元件 (※ 網址下方 "看不到" 提示安裝 ActiveX 控制項訊息)
- 請按下瀏灠器功能表上 [工具] > [管理附加元件] > [啟用或停用附加元件] (※ IE7 額外多出的選項)。
- 系統帶出 "管理附加元件" 對話盒,於「顯示」區域內選擇 "Internet Explorer使用過的附加元件" 選項。
- 請挑選名稱為 "RMGetLicense Class" 附加元件,於「設定」區域選擇 "啟用" 選項並按下「確定」鍵。
- 重新成功取得授權後,即可正常播放。。

當出現「用戶端屬性元件」失效訊息(錯誤代碼:-2147024809;參數錯誤),該怎麼解決?

若發生"錯誤代碼:-2147024809;參數錯誤",可能是您系統內安裝的授權DRM元件已損毀失效,請依照下列步驟修復後,即可正常播放。

工具一 - (微軟官方網站版)

元件修復流程: (※ 執行工具前,請先關閉所有 "網路瀏灠器" 及 "影音播放器-Media Player")

- 下載 「元件修復工具」後,按下「執行」鍵。
- 執行「元件修復工具」(DRM reset utility)並按「下一步(Next)」鍵。
- 系統正在安裝「元件修復工具」,安裝完成後,工具會自動重置用戶端DRM設定。
- 系統重置完成用戶端DRM設定,按下「完成(Finish)」鍵。

當收視過程中,遇到「有聲無影」狀況時,該怎麼解決?

若發生"有聲無影"狀況時,可能是您系統 Windows Media Player 影音播放器接收串流內容時,傳達不正確的連線速度資訊給串流伺服器,這時串流伺服器會嘗試「精簡」串流,由於串流品質降低,因而造成影音播放器遺失所有視訊內容。發生原因可能為以下情形所造成,請依照下列步驟調整設定後,應可正常播放。

手動指定連線速度
- 請您開啟影音播放器( [開始] > [程式集] > [附屬應用程式] > [娛樂] > [Windows Media Player] )後,按下功能表上的「工具」>>「選項」>>「效能」內 [連線速度] 區域,先選擇「選擇連線速度(C)」選項,然後再選取適當的連線速度。

安裝所需視訊轉碼器(Codec)
- 請您開啟影音播放器( [開始] > [程式集] > [附屬應用程式] > [娛樂] > [Windows Media Player] )後,按下功能表上的「工具」>>「選項」>>「播放程式」內 [自動更新 區域,選取「自動下載轉碼器(C)」核取方塊。


手動指定視訊加速設定
- 請您開啟影音播放器( [開始] > [程式集] > [附屬應用程式] > [娛樂] > [Windows Media Player] )後,按下功能表上的「工具」>>「選項」>>「效能」>>「進階」。

- 在 [視訊加速設定] 對話盒中,請您勾選位於 [視訊加速] 區域內使用「重疊」選項,並按下對話盒下方「確定」鍵後(讓設定變更生效),再次重新播放媒體即可。

當收視過程中,播放程式為什麼會出現「緩衝處理中」或「暫停」情形呢?

在某些網路環境下,防火牆會攔截播放串流內容所需的 Universal Datagram Protocol (UDP) 資料傳輸。在此情況下,系統會強制將 Windows Media Player 改用 HTTP/TCP 通訊協定,在通訊協定切換的過程中,會造成網路暫時性的擁塞,用戶端則會顯示「緩衝處理中」或「暫停」情形。

另一種可能原因是: "用戶端本身網路環境擁塞",造成用戶端顯示「緩衝處理中」或「暫停」情形。

如何得知目前使用的影音播放器(Windows Media Player)屬於哪個版本?

當您開啟影音播放器( [開始] > [程式集] > [附屬應用程式] > [娛樂] > [Windows Media Player] )後,按下功能表上的「說明(H)」>>「關於Windows Media Player(A)」,即可得知您目前使用何種影音播放器版本。

當使用 IE 瀏灠器,跳出新視窗被「快顯程式封鎖」時,該怎麼解決?

若發生 "快顯視窗" 遭IE瀏灠器封鎖時,則您可能安裝了下列防跳視窗軟體(如: WindowsXP Service Pack 2、MSN、Yahoo、Google工具列等),請依照下列步驟設定來允許新視窗,即可正常顯示。

Internet Explorer 瀏覽器設定: (請參考微軟網站說明)
- 方法(一):
(1)於瀏灠器「網址(D)」下方: 點選「快顯已封鎖」連結並按下滑鼠右鍵。
(2)請選擇「永遠允許來自這個網站的快顯」項目。
(3)系統將自動帶出 " 是否允許來自這個網站的快顯視窗?" 對話盒,按下「是(Y)」鍵允許來自 '*.該網站網址' 的快顯。

- 方法(二): 於瀏灠器內 [工具] > [快顯封鎖程式] > [快顯封鎖程式設定值] > 允許快顯的網站位址。
(1)MSN 工具列設定: MSN 工具列中的「選項」,取消「封鎖快顯視窗功能」。(請參考相關說明)
(2)Yahoo 工具列設定: Yahoo 工具列中的「選項」,取消「啟動阻擋跳窗功能」。(請參考 Yahoo 網站說明)
(3)Google 工具列設定: Google 工具列中的「選項」,取消「彈出視窗攔截器」功能。(請參考 Google 網站說明)

2009年12月16日 星期三

網頁上的播放器相關參數說明

網頁上的播放器相關參數說明
(默認0為否,-1或1為是)

<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" width="286" height="225">
<param name="AudioStream" value="-1">
<param name="AutoSize" value="-1">
<!--是否自動調整播放大小-->
<param name="AutoStart" value="-1">
<!--是否自動播放-->
<param name="AnimationAtStart" value="-1">
<param name="AllowScan" value="-1">
<param name="AllowChangeDisplaySize" value="-1">
<param name="AutoRewind" value="0">
<param name="Balance" value="0">
<!--左右聲道平衡,最左-9640,最右9640-->
<param name="BaseURL" value>
<param name="BufferingTime" value="15">
<!--緩衝時間-->
<param name="CaptioningID" value>
<param name="ClickToPlay" value="-1">
<param name="CursorType" value="0">
<param name="CurrentPosition" value="0">
<!--當前播放進度 -1 表示不變,0表示開頭 單位是秒,比如10表示從第10秒處開始播放,值必須是-1.0或大於等於0-->
<param name="CurrentMarker" value="0">
<param name="DefaultFrame" value>
<param name="DisplayBackColor" value="0">
<param name="DisplayForeColor" value="16777215">
<param name="DisplayMode" value="0">
<param name="DisplaySize" value="0">
<!--視頻1-50%, 0-100%, 2-200%,3-全屏 其它的值作0處理,小數則採用四捨五入然後按前的處理-->
<param name="Enabled" value="-1">
<param name="EnableContextMenu" value="-1">
<!-是否用右鍵彈出菜單控制-->
<param name="EnablePositionControls" value="-1">
<param name="EnableFullScreenControls" value="-1">
<param name="EnableTracker" value="-1">
<!--是否允許拉動播放進度條到任意地方播放-->
<param name="Filename" value="http://01.wma" valuetype="ref">
<!--播放的文件地址-->
<param name="InvokeURLs" value="-1">
<param name="Language" value="-1">
<param name="Mute" value="0">
<!--是否靜音-->
<param name="PlayCount" value="10">
<!--重複播放次數,0為始終重複-->
<param name="PreviewMode" value="-1">
<param name="Rate" value="1">
<!--播放速率控制,1為正常,允許小數-->
<param name="SAMIStyle" value>
<!--SAMI樣式-->
<param name="SAMILang" value>
<!--SAMI語言-->
<param name="SAMIFilename" value>
<!--字幕ID-->
<param name="SelectionStart" value="-1">
<param name="SelectionEnd" value="-1">
<param name="SendOpenStateChangeEvents" value="-1">
<param name="SendWarningEvents" value="-1">
<param name="SendErrorEvents" value="-1">
<param name="SendKeyboardEvents" value="0">
<param name="SendMouseClickEvents" value="0">
<param name="SendMouseMoveEvents" value="0">
<param name="SendPlayStateChangeEvents" value="-1">
<param name="ShowCaptioning" value="0">
<!--是否顯示字幕,為一塊黑色,下面會有一大塊黑色,一般不顯示-->
<param name="ShowControls" value="-1">
<!--是否顯示控制,比如播放,停止,暫停-->
<param name="ShowAudioControls" value="-1">
<!--是否顯示音量控制-->
<param name="ShowDisplay" value="0">
<!--顯示節目信息,比如版權等-->
<param name="ShowGotoBar" value="0">
<!--是否啟用上下文菜單-->
<param name="ShowPositionControls" value="-1">
<!--是否顯示往前往後及列表,如果顯示一般也都是灰色不可控制-->
<param name="ShowStatusBar" value="-1">
<!--當前播放信息,顯示是否正在播放,及總播放時間和當前播放到的時間-->
<param name="ShowTracker" value="-1">
<!--是否顯示當前播放跟蹤條,即當前的播放進度條-->
<param name="TransparentAtStart" value="-1">
<param name="VideoBorderWidth" value="0">
<!--顯示部的寬部,如果小於視頻寬,則最小為視頻寬,或者加大到指定值,並自動加大高度.此改變只改變四周的黑框大小,不改變視頻大小-->
<param name="VideoBorderColor" value="0">
<!--顯示黑色框的顏色, 為RGB值,比如ffff00為黃色-->
<param name="VideoBorder3D" value="0">
<param name="Volume" value="0">
<!--音量大小,負值表示是當前音量的減值,值自動會取絕對值,最大為0,最小為-9640-->
<param name="WindowlessVideo" value="0">
<!--如果是0可以允許全屏,否則只能在窗口中查看-->
</object>

上面的這個播放器是老式的那種,新式播放器是在MediaPlayer9.0以後出現的,也就是說只有裝了9.0或9.0以上的播放器才能正常使用的.
--------------------------------------------------------------------------------

下面是新式播放器代碼,相對以前的來說要簡單很多:
<object id="player" height="64" width="260" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
<param NAME="AutoStart" VALUE="-1">
<!--是否自動播放-->
<param NAME="Balance" VALUE="0">
<!--調整左右聲道平衡,同上面舊播放器代碼-->
<param name="enabled" value="-1">
<!--播放器是否可人為控制-->
<param NAME="EnableContextMenu" VALUE="-1">
<!--是否啟用上下文菜單-->
<param NAME="url" VALUE="http://1.wma">
<!--播放的文件地址-->
<param NAME="PlayCount" VALUE="1">
<!--播放次數控制,為整數-->
<param name="rate" value="1">
<!--播放速率控制,1為正常,允許小數,1.0-2.0-->
<param name="currentPosition" value="0">
<!--控件設置:當前位置-->
<param name="currentMarker" value="0">
<!--控件設置:當前標記-->
<param name="defaultFrame" value="">
<!--顯示默認框架-->
<param name="invokeURLs" value="0">
<!--腳本命令設置:是否調用URL-->
<param name="baseURL" value="">
<!--腳本命令設置:被調用的URL-->
<param name="stretchToFit" value="0">
<!--是否按比例伸展-->
<param name="volume" value="50">
<!--默認聲音大小0%-100%,50則為50%-->
<param name="mute" value="0">
<!--是否靜音-->
<param name="uiMode" value="mini">
<!--播放器顯示模式:Full顯示全部;mini最簡化;None不顯示播放控制,只顯示視頻窗口;invisible全部不顯示-->
<param name="windowlessVideo" value="0">
<!--如果是0可以允許全屏,否則只能在窗口中查看-->
<param name="fullScreen" value="0">
<!--開始播放是否自動全屏-->
<param name="enableErrorDialogs" value="-1">
<!--是否啟用錯誤提示報告-->
<param name="SAMIStyle" value>
<!--SAMI樣式-->
<param name="SAMILang" value>
<!--SAMI語言-->
<param name="SAMIFilename" value>
<!--字幕ID-->
</object>

2009年11月29日 星期日

如何封鎖Facebook遊戲

如何封鎖「非死不可」Facebook遊戲,其方法有三

(一)封鎖 69.63.176.140,或針對該IP的 80,443 做封鎖
(二)封鎖app.facebook.com 或是 apps.facebook.com
(三)限制連線至facebook.com 所有的頻寬,只要給5K就好

這樣就可以封鎖Facebook遊戲,讓他像鬼檔牆一樣喔,一直redirect到Facebook的登入首頁,或是讓它慢慢爬「非死不可」Facebook

2009年11月26日 星期四

看不見YouTube或無名小站的影音(影片)解決方法,flash player安裝及修復教學

只要是鑲嵌是的影音都會出現的問題,在瀏覽時只出現一張圖片,完全無法看到影音的內容

解決方法
整理:Angelo
說明:最近滿常見的問題,提供給大家參考使用

1.先以IE做例子,開啟IE後選擇工具列【工具】→【網際網路選項】,切換到〔一般〕標籤頁面,然後按下中間的〔刪除檔案〕,這時會出現對話盒,勾選「刪除所有離線內容」後按下〔確定〕,刪除完畢後就可以把IE完全關閉。

2.下載Flash Player Uninstaller
*Uninstall_flash_player解除安裝軟體(請複製網址下載)
http://fpdownload.macromedia.com/get/flashplayer/current/uninstall_flash_player.exe

下載Flash Player Uninstaller回來,然後關閉所有的瀏覽器視窗並開始執行。在語言部份選擇「U.S. English」,然後按下〔Uninstall〕進行移除。

3.移除完畢後,會出現「Uninstalled Successfully」的對話盒,按下〔OK〕關閉對話盒後重新開機。若無法順利移除成功,先重新開機後再移除一次就行了。

4.重新進入Windows後,下載Flash Player回來安裝
*flash_player安裝軟體(請複製網址下載)
http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_tc.exe

重新進入Windows後,下載Flash Player回來安裝,安裝完畢再連線到YouTube影片網頁上,應該就能看見影片。

5.如果還有問題,那就連線到
http://www.macromedia.com/go/getflashplayer/

按下畫面中的〔Download Now〕,等一下就會有對話盒出現,按下〔安裝〕把缺少的Plug-in補上,再回到YouTube影片網頁上就可以了。

6.如果是使用Firefox的話,先按下工具列【工具】→【清除隱私資料】,把瀏覽器暫存檔全部清除,然後照上面的步驟來做,就可以修復Flash Player,繼續欣賞YouTube的影片了。

7.如果還是無法解決,請下載除錯程式進行Flash Player除錯
*flash_player 除錯安裝軟體(請複製網址下載)
http://download.macromedia.com/pub/flashplayer/updaters/9/flashplayer_9_ax_debug.exe

2009年11月25日 星期三

C# 四捨五入之無條件進位 0.5

public double halfRound(double val)     
{
double ten = val * 10;
double key = ten % 10;

if( key>=5 || key==0 )
return Math.Round( val, MidpointRounding.AwayFromZero);
else
return Math.Round(val, MidpointRounding.AwayFromZero)+0.5;
}

這樣子就達成目的了!

halfRound(1.2) => 1.5
halfRound(1.6) => 2

C# 時間相減

            TimeSpan timekey = DateTime.Parse(06:00).Subtract(DateTime.Parse(10:15)); //時間相減
decimal a = decimal.Parse(timekey.ToString().Substring(0, 2));
decimal b = decimal.Parse(timekey.ToString().Substring(3, 2));
decimal C = a + (b / 60);

計算結果為
a = 4
b = 15
c = 4.25

2009年11月18日 星期三

C# 今天星期幾

           string timeweek = "";
string timekey = DateTime.Parse(newtime.Substring(0, 4) + "/" + newtime.Substring(4, 2) + "/" + newtime.Substring(6, 2)).DayOfWeek.ToString();
if (timekey == "Sunday")
{
timeweek = "星期日";
}
else if (timekey == "Monday")
{
timeweek = "星期一";
}
else if (timekey == "Tuesday")
{
timeweek = "星期二";
}
else if (timekey == "Wednesday")
{
timeweek = "星期三";
}
else if (timekey == "Thursday")
{
timeweek = "星期四";
}
else if (timekey == "Friday")
{
timeweek = "星期五";
}
else if (timekey == "Saturday")
{
timeweek = "星期六";
}

2009年11月12日 星期四

asp.net 與多國語言

各國家區域性名稱
zh-CN 0x0804 中文-中國
zh-TW 0x0404 中文-臺灣
zh-CHS 0x0004 簡體中文
zh-CHT 0x7C04 繁體中文
en 0x0009 英語
en-US 0x0409 英語-美國
en-GB 0x0809 英語-英國

如果你的網頁是 Default.aspx
那多語系資源檔可以是
Default.aspx.resx
Default.aspx.zh-cht.resx (繁中)
Default.aspx.en.resx (英)
Default.aspx.zh-chs.resx (簡中)

我們寫asp.net 抓到的 Thread.CurrentThread.CurrentCulture 是 zh-TW
如果沒有Default.aspx.zh-tw.resx,因為zh-TW 的Parent 是zh-cht,所以就會讀取 Default.aspx.zh-cht.resx

而不論如何,Default.aspx.resx是一定要有的。

Page不需特別設定,就會自動讀對映的語系顯示網頁,但如果測試就特別指定
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="YourClass.aspx.cs" Inherits="YourClass" UICulture="zh-TW" %>
指定UICulture也就是指定用哪個語系的資源檔來顯示畫面

雖然設定 Culture 與 UICulture 都會改變畫面的語系
但如果是指定<%@ Page Culture="zh-TW"%>,是會改變 Thread.CurrentThread.CurrentCulture ,
程式裏跟Culture相關的都會影響到,比方說
Response.Write(DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() + "<br />");
在 Cultrue="zh-TW" 的情況下,是秀出『2006年12月12日下午 03:34:46』
在 Cultrue="en-US" 的情況下,是秀出『Tuesday, December 12, 20063:49:08 PM』

文件裏獲得在地字串的方法有2種
<asp:Label ID="lblLanguage" runat="server" Text="<%$ Resources:Language %>"></asp:Label>
<asp:Label ID="lblNavigaion" runat="server" meta:resourcekey="lblNavigation"></asp:Label>

如果想用程式取得
protected void Page_Init(object sender, EventArgs e) {
lblNavigaion.Value = GetLocalResourceObject("Navigaion").ToString();
}
User Control 裏也可以這樣讀

參考網址http://msdn.microsoft.com/zh-tw/library/system.globalization.cultureinfo.currentculture(VS.80).aspx

離婚酒店

他和她結婚整整10年了,夫妻間已經沒有任何衝動與情趣,他越來越覺得自己對她幾乎就是一種程式與義務,他開始厭煩起了她,尤其是單位新調進了一個年輕活潑的女孩,對他發起了瘋狂的進攻,他突然覺得她是自己的第二春,經過再三考慮,他決定和她離婚。她似乎也麻木了,很平靜地答應了他,兩個人一起走進了民政部。手續辦得很順利,出門後,兩個人已經是各自獨立的自由人了,不知為什麼,他心裏突然有種空落落的感覺,他看了看她:「天已經晚了,一起去吃點飯吧。」

她看了看他:「好吧,聽說新開了一家‘離婚酒店’,專門執行離婚夫婦的最後一頓晚餐,要不咱們到那兒去看看。」他點了點頭,兩人一前一後默默地走進了離婚酒店。

「先生女士晚上好。」二人在包廂剛坐下,服務小姐便走了進來,「請問兩位想吃點兒什麼?」他看了看她:「你點吧。」她搖了搖頭:「我不常出來,不太清楚這些,還是你點吧。」「對不起先生女士,我們離婚酒店有個規矩,這頓飯必須要由女士點先生平時最愛吃的菜,由先生點女士平時最愛吃的菜,這叫‘最後的記’。」「那好吧,」她理了理頭髮,「清蒸魚、溜蘑菇、拌木耳,記住,都不要放蔥薑蒜,我先生……這位先生他不吃這些。」「先生呢?」服務小姐看了看他。他愣住了。結婚10年,他真的不知道老婆喜歡吃什麼。他張著嘴,尷尬地愣在了那兒。

「就這些吧,其實這是我們兩個人都愛吃的。」她連忙打起了圓場。服務小姐笑了笑:「說實話,到我們離婚酒店來吃這最後一頓晚餐,所有的先生和女士其實都吃不下什麼,所以這‘最後的記憶’還是不要吃了吧。就喝我們酒店特意為所有離婚人士準備的晚餐--冷飲吧,這也是所有來的人都不拒絕的選擇。」他與她都點了點頭:「那就來冷飲吧。」很快,服務小姐送來了兩份冷飲,兩份飲料中一份淡藍一片,全是冰渣;一份滿杯紅潤,冒著熱氣。「這份晚餐名叫‘一半是火焰,一半是海水’,兩位慢用。」服務小姐介紹完退了下去。包房裏靜悄悄的,兩個人相對而坐,一時竟不知道該說什麼好。輕輕一陣敲門聲,服務小姐走了進來,托盤裏托著一枝鮮豔的紅玫瑰,「先生,還記得您第一次給這位女士送花的情景嗎?現在一切都結束了,夫妻不成就當朋友,朋友要好聚好散,最後為女士送朵玫瑰吧。」

她渾身一抖,眼前又浮現出了10年前他給她送花的情景,那時,他們剛剛來到這座舉目無親的省城,什麼都沒有,一切從零開始。白天,他們四處找工作,努力拼搏;晚上,為了增加收入,她去晚市擺小攤,他去給人家刷盤子。很晚很晚,他們才一起回到租住在地下室裏那不足10平米的小屋。日子很苦,可是他們卻很幸福。到省城的第一個情人節,那天,他為自己買了第一朵紅玫瑰,她幸福得流下了眼淚。10年了,一切都好起來了,可兩個人卻走向了分離。她想著想著,淚水盈滿了雙眼,她擺了擺手說:「不用了。」他也想起了過去的10年,他這才記起,自己已經有五六年沒有給她買過一枝玫瑰了。他擺了擺手:「不,要買。」服務小姐卻拿起了玫瑰,“刷刷”兩下撕成了兩半,分別扔進了兩個人的飲料杯裏,玫瑰竟然溶解在了飲料裏。「這是我們酒店特意用糯米製成的紅玫瑰,也是送給你們的第三道菜,名叫‘映景的美麗’。先生女士慢用,有什麼需要直接叫我。」服務小姐說完,轉身走了出去。

「我……」他一把握住她的手,有些說不出話來。她抽了抽手,沒有抽動,便不再動彈。兩個人靜靜地對視著,什麼也說不出來。“啪!”突然,燈熄了,整個包房裏漆黑一片,外面警鈴大作,一股煙味兒飄了進來。「怎麼了?」兩個人急忙站了起來。「店起火了,大家馬上從安全通道走!快!」外面,有人聲嘶力竭地喊了起來。「老公!」她一下撲進了他的懷裏,「我怕!」「別怕!」他緊緊摟住她,「親愛的,有我呢。走,往外衝!」
包廂外面燈光通明,秩序井然,什麼都沒有發生。服務小姐走了過來:「對不起,先生女士,讓兩位受驚了。酒店並沒有失火,煙味兒也是特意往包房裏放的一點點,這是我們的第四道菜,名叫‘內心的選擇’。請回包廂。」他和她回到了包廂,燈光依舊。他一把拉她:「親愛的,服務小姐說得對,剛才那才是你我內心真正的選擇。其實,我們誰都離不開誰,明天咱們重新結婚吧?」她咬了咬嘴唇:「你願意嗎?」「我願意,我現在什麼都明白了,明天一早咱們就去辦結婚。小姐,買單。」他說著喊了起來。服務小姐走了近來,遞給兩人一人一張精緻的紅色清單:「先生女士好,這是兩位的帳單,也是本酒店的最後一道贈品,名叫‘永遠的帳單’,請兩位永遠保存吧。」他看著帳單,眼淚淌了下來。「你怎麼了?」她連忙問道。他把帳單遞給了她:「親愛的,我錯了,我對不起你。」她打開帳單一看,只見上面寫著:

一個溫暖的家;兩隻操勞的手;三更不熄等您歸家的燈;四季注意身體的叮囑;無微不至的關懷;六旬婆母的微笑;起早貪黑對孩子的照顧;八方維護您的威信;九下廚房為了您愛吃的一道菜;十年為您逝去的青春……這就是您的妻子。

「老公,您辛苦了,這些年也是我冷漠了你。」她也把自己的那份帳單遞給了他。他打開帳單,只見上面寫著:

一個男人的責任;兩肩挑起的重擔;三更半夜的勞累;四處奔波的匆忙;無法傾訴的委屈;留在臉上的滄桑;七姑八姨的義務;八上八下的波折;九優一疵的凡人;時時對家對子的真情……這就是您的丈夫。

兩個人抱在一起,放聲痛哭。結完帳,他和她對經理千恩萬謝,手牽手走回了家。看者他們幸福的背影,經理微笑著點了點頭:「真幸福,我們離婚酒店又挽救了一個家!

2009年11月5日 星期四

Windows 2008 :: 變更帳戶密碼原則

Windows 2008 Domain Admin 帳戶密碼要過期了懶得重設,想說趕快改一下密碼原則,結果怎麼本機安全性原則的密碼原則都被鎖定了,原來是在群組原則管理做設定...

系統管理工具 > 群組原則管理 > 樹系 > 展開網域

在 Default Domain Policy 按右鍵 > 編輯 > 原則 > Windows 設定 > 安全性設定 > 帳戶原則 > 密碼原

2009年11月3日 星期二

滑鼠右鍵無效語法

Internet Explorer : 適用
Mozilla Firefox : 適用
Google Chrome : 適用
舊版Xanga, Look&Feel : 適用
新版Xanga, Theme : 不適用

<script language=JavaScript>
var message="";
function clickIE() {if (document.all) {(message);return false;}}
function clickNS(e) {if
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {(message);return false;}}}
if (document.layers)
{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
document.oncontextmenu=new Function("return false")
</script>

2009年10月28日 星期三

用Javascript來隱藏div

先在頁面上建立Div標籤
<div id="sbtitle">
<div onclick='showhidediv("toggle");'>最新日誌</div>
<div id="toggle" style="display:none;">最新日誌內容</div>
Javascript控制Div開啟隱藏的語法
function showhidediv(id){
try{
var sbtitle=document.getElementById(id);
if(sbtitle){
if(sbtitle.style.display=='block'){
sbtitle.style.display='none';
}else{
sbtitle.style.display='block';
}
}
}catch(e){}
}

2009年10月20日 星期二

txt文字檔取字串的方法

     string text;
using (System.IO.StreamReader sr = new System.IO.StreamReader(path))
{
text = sr.ReadToEnd(); //設中斷點, 看 text 內容找分行及分欄符號
}

string lineDelimitor = "\r\n"; //假設從 text 看到行與行間隔著 \r\n
string colDelimitor = "\t"; //假設從 text 看到每行欄與欄間隔著 \t

string[] lines = text.Split(new string[] { lineDelimitor }, StringSplitOptions.None); //先分行
string[][] data = new string[lines.Length][];
for(int i=0; i<lines.Length; i++)
data[i] = lines[i].Split(new string[] { colDelimitor }, StringSplitOptions.None); //再把每行分欄

data[0] 代表第一行,
string[] row3 = data[2]; // 第三行各欄的資料

[C#] 字串輸出格式

C#的String.Format舉例
stringstr1 =string.Format("{0:N1}",56789); //result: 56,789.0
stringstr2 =string.Format("{0:N2}",56789); //result: 56,789.00
stringstr3 =string.Format("{0:N3}",56789); //result: 56,789.000
stringstr8 =string.Format("{0:F1}",56789); //result: 56789.0
stringstr9 =string.Format("{0:F2}",56789); //result: 56789.00
stringstr11 =(56789 / 100.0).ToString("#.##"); //result: 567.89
stringstr12 =(56789 / 100).ToString("#.##"); //result: 567

C 或 c 貨幣
Console.Write("{0:C}", 2.5); //$2.50
Console.Write("{0:C}", -2.5); //($2.50)

D 或 d 十進位數字
Console.Write("{0:D5}", 25); //00025

E 或 e 科學型
Console.Write("{0:E}", 250000); //2.500000E+005

F 或 f 固定點
Console.Write("{0:F2}", 25); //25.00
Console.Write("{0:F0}", 25); //25

G 或 g 常規
Console.Write("{0:G}", 2.5); //2.5

N 或 n 數字
Console.Write("{0:N}", 2500000); //2,500,000.00

X 或 x 十六進位
Console.Write("{0:X}", 250);

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:00 AM
{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}" 12345 12345
"{0:D8}" 12345 00012345
"{0:E}" 12345.6789 1234568E+004
"{0:E10}" 12345.6789 1.2345678900E+004
"{0:F}" 12345.6789 12345.68
"{0:F0}" 12345.6789 12346
"{0:G}" 12345.6789 12345.6789
"{0:G7}" 123456789 1.234568E8
"{0:N}" 12345.6789 12,345.68
"{0:N4}" 123456789 123,456,789.0000
"Total: {0:C}" 12345.6789 Total: $12345.68

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

格式 說明 輸出格式
d 精簡日期格式 MM/dd/yyyy
D 詳細日期格式 dddd, MMMM dd, yyyy
f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm
F 完整日期時間格式 (long date + long time) dddd, MMMM dd, yyyy HH:mm:ss
g 一般格式 (short date + short time) MM/dd/yyyy HH:mm
G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss
m,M 月日格式 MMMM dd
s 適中日期時間格式 yyyy-MM-dd HH:mm:ss
t 精簡時間格式 HH:mm
T 詳細時間格式 HH:mm:ss

電腦新病毒藏身資源回收桶「W32.Pilleuz」蠕蟲病毒-sysdate.exe

藏身在電腦系統中的資源回收桶,巧妙躲過檢查。掃毒軟體公司諾頓近日發現,一種「W32.Pilleuz」蠕蟲病毒,以此方式避開掃毒,並進而存取電腦檔案或攻擊電腦,呼籲電腦使用者經常更新病毒定義檔,備份檔案及掃毒,以免電腦受損。

該公司指出,電腦使用者一般很少注意到電腦系統的資源回收桶內的檔案內容。這次發現的蠕蟲病毒就利用此一特性,隱身於資源回收桶,一旦開啟時,病毒會複製到資源回收桶中,並且命名為「sysdate.exe」檔案,接著新增登錄表,在每次開機時都會自動執行檔案。

此一病毒攻擊方式,以後門程式從遠端存取使用者電腦檔案,還可讓病毒自動更新,竊取使用者資料,包括保存在電腦中的密碼,瀏覽器資料等,更會利用使用者電腦發起(Dos)攻擊,以及修改使用者檔案等惡行。

W32.Pilleuz病毒的傳播方式非常多樣,主要的像是透過即時訊息,發送惡意連結給使用者的好友;透過行動儲存裝置;及自身複製到共享軟體的共同目錄,借用共享軟體傳播出去。

C#常用字串函數

length() 取得字串長度
Remove(int1,int2) 從int1(起始位置)開始刪除長度為int2的字串
Insert(int,string) 在int的位置插入string
Substring(int) 從參數開始取出剩下的字串
Substring(int1,int2) 取出int1開始長度為int2的字串

IndexOf(string) 傳回第一次搜尋到字串(string)的位置
IndexOf(string,int) 傳回第一次搜尋到字串(string)的位置,開始搜尋位置為int
LastIndexOf(string) 跟IndexOf功能類似,但從後面開始搜尋
LastIndexOf(string,int) 跟IndexOf功能類似,但從後面開始搜尋
Replace(char,char) 取代字元

ToLower() 將英文轉成小寫
ToUpper() 將英文轉成大寫
Trim() 刪除字串前後的空白字元
TrimEnd() 刪除字串尾部的空白字元
TrimStart() 刪除字串開頭的空白字元

2009年10月19日 星期一

TeamViewer 網管的惡夢,資安怎麼控管?

類似 TeamViewer 的軟體越來越多了,看起來只能見一個殺一個,見兩個殺一雙。舉個最夯的軟體 TeamViewer ,可遠端近端雙向互連,只要可以上網就可以使用,可以遙控、可以傳檔、可以 CHAT ,談到這裡就頭皮發麻了。更恐怖的是大家都可以免安裝, TeamViewer官方直接就提供免安裝軟件服務...

所以下面就教你如何封鎖該軟體的連線
TeamViewer 工作原理是透過 TeamViewer Server Connect,
它會優先連接 master.dyngate.com,
以取得連線資料,
並使用 UDP Port Connect Remote Host,
所以只要把 master.dyngate.com --> 87.230.73.23 擋掉,
TeamViewer 就不能用了。

SQL Injection之解決建議措施及相關資訊彙整

漏洞說明:
SQL Injection是一種未做好輸入查驗(Input Validation)的問題,即在撰寫應用程式時,沒有對使用者的輸入做妥善的過濾與處理,便將其組合成SQL指令,傳送給SQL server執行。因而若使用者輸入之資料中含有某些對資料庫系統有特殊意義的符號或命令時,便可能讓使用者有機會對資料庫系統下達指令,而造成入侵所帶來的損失。事實上,這樣的疏漏並不是資料庫系統的錯誤,而是程式設計師或軟體開發者的疏忽所產生的。

影響平台:
使用網站系統:Apache、IIS、Domino、Netscape

使用程式碼:
ASP、PHP、JSP

攻擊破壞SQL資料庫:
包括 MS-SQL、MySQL、Oracle、Sybase、DB2 等等

SQL Injection可能造成的危害:
透過SQL Injection操作資料庫,可以新增、更動或刪除資料庫的資料,造成資料遺漏或是不正確;如果操作資料庫的使用者權限為系統管理者,那麼還有可能造成其他更嚴重的破壞,例如奪取資料庫的控制權。

SQL Injection的影響範圍:
只要有使用或連結資料庫的軟體、網路服務都有可能面臨SQL Injection的威脅。乍聽之下影響範圍似乎很大,但是大多數的商用軟體並不會有這樣的問題;比較嚴重的可能是網路服務部分,由於網站程式開發者的素質良莠不齊,或是對於資料庫的指令操作與系統管理不熟悉,所以只要有提供表單(Form)輸入介面的網站,都有可能面臨威脅。

解決之道與預防方法:
1. 對於字串的輸入加以過濾,並限制長度。例如 ' 或 " 這種單、雙引號都應該過濾掉,這樣可以避免輸入者利用 ' 或 " 這種單、雙引號截斷原本的SQL指令再插入自己的指令。過濾的方法依開發語言的不同而有不同的方法,以VB Script/ASP為例,過濾單引號的簡單方法為: SafeString = Replace(InputString, “'”, “''”)


2. 若輸入為數值資料則須確定其只輸入0~9之數字,若包含其他英文字母或符號則一律拒絕接受。

3. 對於前兩項的檢查必須寫在server端的程式上,如PHP、ASP及其他各種CGI程式,而不能將其寫於Java script或VB script等會於client端執行的程式上,因惡意使用者可將client端程式另存於本地端硬碟後,再將其修改以略過檢查。並且不要在server上留有.bak或.old檔,若有.inc檔也不要取與主.asp相同或容易猜測之檔名,因為一般網頁伺服器會允許這些檔案的下載。

4. 加強資料庫帳號與權限管理,讓網站或軟體不以系統管理者的帳號連結資料庫,而對每個資料庫設定一組個別的帳號與強健的密碼,限制這組帳號僅能對該資料庫有讀寫權限。當面臨SQL Injection的侵入時,分權管理能夠限制損害的範圍,減少因為疏忽造成的損失。

5. 做好正確錯誤處理,最理想狀態是所有使用者輸入皆在程式設計者預期之中;若萬一出現非預期的情形也要做好例外處理,勿讓使用者直接看到系統傳回的錯誤訊息,以免惡意使用者由系統錯誤訊息中獲取過多資訊。

6. 全面檢視軟體的程式碼。這在一般商用軟體或應用軟體不太可能做到,但是可以詢問軟體廠商這類問題,以確保他們有進行檢查;網站程式的部分,可以請開發的程式設計師做一次全面性的檢查。

7. 各資料庫系統安裝時通常會有一些預先定義的Table,若確定這些Table並不需要使用到,最好予以刪除,以免惡意使用者利用這些Table獲取過多資訊。

8. 做好軟體開發控管。針對每個資料欄位的Input,確實做好檢查的工作,以降低開發出面臨威脅的程式或軟體。

轉自 邦邦的部落格 http://blog.xuite.net/longine.chen/itforum/14788402?ref=rel

2009年10月18日 星期日

Web service的技術特點

Webservice的技術特點

長項一: 跨防火牆的通信
如果應用程序有成千上萬的用戶,而且分佈在世界各地,那麼客戶端和服務器之間的通信將是一個棘手的問
題。因為客戶端和服務器之間通常會有防火牆或者代理服務器。在這種情況下,使用DCOM就不是那麼簡單,通常也不便於把客戶端程序發佈到數量如此龐大的每一個用戶手中。傳統的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應用程序的中間層暴露給最終用戶。這樣做的結果是開發難度大,程序很難維護。
舉個例子,在應用程序裡加入一個新頁面,必須先建立好用戶界面(Web頁面),並在這個頁面後面,包含相應商業邏輯的中間層組件,還要再建立至少一個ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結果格式化為HTML形式,最後還要把「結果頁」送回瀏覽器。要是客戶端代碼不再如此依賴於HTML表單,客戶端的編程就簡單多了。

如果中間層組件換成Web Service的話,就可以從用戶界面直接調用中間層組件,從而省掉建立ASP頁面的那一步。要調用Web Service,可以直接使用Microsoft SOAP Toolkit或.NET這樣的SOAP客戶端,也可以使用自己開發的SOAP客戶端,然後把它和應用程序連接起來。不僅縮短了開發週期,還減少了代碼複雜度,並能夠增強應用程序的可維護性。同時,應用程序也不再需要在每次調用中間層組件時,都跳轉到相應的「結果頁」。

從經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用Web Service這種結構,可以節省花在用戶界面編程上20%的開發時間。另外,這樣一個由Web Service組成的中間層,完全可以在應用程序集成或其它場合下重用。最後,通過Web Service把應用程序的邏輯和數據「暴露」出來,還可以讓其它平台上的客戶重用這些應用程序。

長項二: 應用程序集成
企業級的應用程序開發者都知道,企業裡經常都要把用不同語言寫成的、在不同平台上運行的各種程序集成起來,而這種集成將花費很大的開發力量。應用程序經常需要從運行在IBM主機上的程序中獲取數據;或者把數據發送到主機或UNIX應用程序中去。即使在同一個平台上,不同軟件廠商生產的各種軟件也常常需要集成起來。通過Web Service,應用程序可以用標準的方法把功能和數據「暴露」出來,供其它應用程序使用。

例如,有一個訂單登錄程序,用於登錄從客戶來的新訂單,包括客戶信息、發貨地址、數量、價格和付款方式等內容;還有一個訂單執行程序,用於實際貨物發送的管理。這兩個程序來自不同軟件廠商。一份新訂單進來之後,訂單登錄程序需要通知訂單執行程序發送貨物。通過在訂單執行程序上面增加一層Web Service,訂單執行程序可以把「Add Order」函數「暴露」出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調用這個函數來發送貨物了。

長項三: B2B的集成
用Web Service集成應用程序,可以使公司內部的商務處理更加自動化。但當交易跨越供應商和客戶、突破公司的界限時會怎麼樣呢?跨公司的商務交易集成通常叫做B2B集成。

Web Service是B2B集成成功的關鍵。通過Web Service,公司可以把關鍵的商務應用「暴露」給指定的供應商和客戶。例如,把電子下單系統和電子發票系統「暴露」出來,客戶就可以以電子的方式發送訂單,供應商則可以以電子的方式發送原料採購發票。當然,這並不是一個新的概念, EDI(電子文檔交換)早就是這樣了。但是,Web Service的實現要比EDI簡單得多,而且Web Service運行在Internet上,在世界任何地方都可輕易實現,其運行成本就相對較低。不過,Web Service並不像EDI那樣,是文檔交換或B2B集成的完整解決方案。Web Service只是B2B集成的一個關鍵部分,還需要許多其它的部分才能實現集成。

用Web Service來實現B2B集成的最大好處在於可以輕易實現互操作性。只要把商務邏輯「暴露」出來,成為Web Service,就可以讓任何指定的合作夥伴調用這些商務邏輯,而不管他們的系統在什麼平台上運行,使用什麼開發語言。這樣就大大減少了花在B2B集成上的時間和成本,讓許多原本無法承受EDI的中小企業也能實現B2B集成。

長項四: 軟件和數據重用
軟件重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,另一種形式是二進制形式的組件重用。

當前,像表格控件或用戶界面控件這樣的可重用軟件組件,在市場上都佔有很大的份額。但這類軟件的重用有一個很大的限制,就是重用僅限於代碼,數據不能重用。原因在於,發佈組件甚至源代碼都比較容易,但要發佈數據就沒那麼容易,除非是不會經常變化的靜態數據。

Web Service在允許重用代碼的同時,可以重用代碼背後的數據。使用Web Service,再也不必像以前那樣,要先從第三方購買、安裝軟件組件,再從應用程序中調用這些組件;只需要直接調用遠端的Web Service就可以了。舉個例子,要在應用程序中確認用戶輸入的地址,只需把這個地址直接發送給相應的Web Service,這個Web Service 就會幫你查閱街道地址、城市、省區和郵政編碼等信息,確認這個地址是否在相應的郵政編碼區域。Web Service 的提供商可以按時間或使用次數來對這項服務進行收費。這樣的服務要通過組件重用來實現是不可能的,那樣的話你必須下載並安裝好包含街道地址、城市、省區和郵政編碼等信息的數據庫,而且這個數據庫還是不能實時更新的。

另一種軟件重用的情況是,把好幾個應用程序的功能集成起來。例如,要建立一個局域網上的門戶站點應用,讓用戶既可以查詢聯邦快遞包裹,查看股市行情,又可以管理自己的日程安排,還可以在線購買電影票。現在Web上有很多應用程序供應商,都在其應用中實現了這些功能。一旦他們把這些功能都通過Web Service 「暴露」出來,就可以非常容易地把所有這些功能都集成到你的門戶站點中,為用戶提供一個統一的、友好的界面。
將來,許多應用程序都會利用Web Service,把當前基於組件的應用程序結構擴展為組件/Web Service 的混合結構,可以在應用程序中使用第三方的Web Service 提供的功能,也可以把自己的應用程序功能通過Web Service 提供給別人。兩種情況下,都可以重用代碼和代碼背後的數據。

轉自http://big5.webasp.net/article/5/4876.htm

什麼是web service

關鍵字: SOAP XML XSD WSDL

什麼是webservice
從表面上看,Web service 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API。這就是說,你能夠用編程的方法通過Web來調用這個應用程序。

對Web service 更精確的解釋: Web services是建立可互操作的分佈式應用程序的新平台。作為一個Windows程序員,你可能已經用COM或DCOM建立過基於組件的分佈式應用程序。COM是一個非常好的組件技術,但是我們也很容易舉出COM並不能滿足要求的情況。Web service平台是一套標準,它定義了應用程序如何在Web上實現互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平台上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。

不管你的Web service是用什麼工具,什麼語言寫出來的,只要你用SOAP協議通過HTTP來調用它,總體結構都應如下圖所示。通常,你用你自己喜歡的語言(如VB 6或者VB.NET)來構建你的Web service,然後用SOAP Toolkit或者.NET的內建支持來把它暴露給Web客戶。於是,任何語言,任何平台上的客戶都可以閱讀其WSDL文檔,以調用這個Web service。客戶根據WSDL描述文檔,會生成一個SOAP請求消息。Web service都是放在Web服務器 (如IIS) 後面的,客戶生成的SOAP請求會被嵌入在一個HTTP POST請求中,發送到Web服務器來。Web服務器再把這些請求轉發給Web service請求處理器。對VB 6程序來說,Web service請求處理器是一個與SOAP Toolkit組件協同工作的ASP頁面或ISAPI extension。而對VB.NET程序來說,Web service請求處理器則是一個.NET Framework自帶的ISAPI extension。請求處理器的作用在於,解析收到的SOAP請求,調用Web service,然後再生成相應的SOAP應答。Web服務器得到SOAP應答後,會再通過HTTP應答的方式把它送回到客戶端。

基本概念
SOAP
Web service建好以後,其他人就會去調用它。簡單對像訪問協議(SOAP)提供了標準的遠程過程調用( RPC)方法來調用Web service。SOAP規範定義了SOAP消息的格式,以及怎樣通過HTTP協議來使用SOAP。SOAP也是基於XML和XSD的,XML是SOAP的數據編碼方式。客戶端和服務端之間的方法調用請求和結果返回值都放在這些消息裡。

XML和XSD
可擴展的標記語言(XML)是Web service平台中表示數據的基本格式。除了易於建立和易於分析外,XML主要的優點在於它既是平台無關的,又是廠商無關的。無關性是比技術優越性更重要的。XML解決了數據表示的問題,但它沒有定義一套標準的數據類型,更沒有說怎麼去擴展這套數據類型。例如,整形數到底代表什麼?16位,32位,還是64位?這些細節對實現互操作性都是很重要的。W3C制定的XML Schema(XSD)就是專門解決這個問題的一套標準。它定義了一套標準的數據類型,並給出了一種語言來擴展這套數據類型。Web service平台就是用XSD來作為其數據類型系統的。當用某種語言(如VB.NET或C#)來構造一個Web service時,為了符合Web service標準,所有使用的數據類型都必須被轉換為XSD類型。

WSDL(Web Services Description Language)
用於描述服務端所提供服務的XML格式。WSDL文件裡,描述了服務端提供的服務,提供的調用方法,以及調用時所要遵循的格式,比如調用參數和返回值的格式等等。WSDL 很像COM編程裡的IDL(Interface Description Language),是服務器與客戶端之間的契約,雙方必須按契約嚴格行事才能實現功能。

WSML(Web Services Meta Language)
用於描述WSDL裡提供的方法與實現該方法的COM對像之間的映射關係。該文件是Microsoft的實現中特有的,不是SOAP標準的一部分。一般情況下,該文件只在服務端存在。

轉自 http://big5.webasp.net/article/5/4877.htm

2009年10月12日 星期一

原創-網站繁體轉簡體功能-推薦:Visual Studio International Pack

在MasterPage上的程式碼
using System.Globalization;
using System.IO;
using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter; using System.Threading;
using System.Configuration;
在Page_Load加上
        if (!IsPostBack)
{
if (Session["CultureName"] == null)
{
if (Response.Cookies["lang"].Value == null)
{
Session["CultureName"] = CultureInfo.CurrentCulture.Name;
}
else
{
Session["CultureName"] = Response.Cookies["lang"].Value;

}
}
}
繁體按鈕
    protected void LinkButton1_Click(object sender, EventArgs e)
{
Session["CultureName"] = "zh-TW";
Response.Cookies["lang"].Value = "zh-TW";
Response.Cookies["lang"].Expires = DateTime.Now.AddDays(60);
Page.Response.Redirect(Page.Request.Url.ToString(), true);
}
簡體按鈕
    protected void LinkButton2_Click(object sender, EventArgs e)
{
InitializeCulture();
Session["CultureName"] = "zh-CN";
Response.Cookies["lang"].Value = "zh-CN";
Response.Cookies["lang"].Expires = DateTime.Now.AddDays(60);
Page.Response.Redirect(Page.Request.Url.ToString(), true);
}
在網頁的Render事件
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
try
{
string lang = Session["CultureName"].ToString();
string sText;
StringWriter oStringWriter = new StringWriter();
HtmlTextWriter oHtmlWriter = new HtmlTextWriter(oStringWriter);
base.Render(oHtmlWriter);
oHtmlWriter.Flush();
oHtmlWriter.Close();
sText = oStringWriter.ToString();
if (lang == "zh-CN")
{
sText = translate.Big5ToGb(sText);
}
else if (lang == "zh-TW")
{
sText = translate.GbToBig5(sText);
}
Response.Write(sText);
}
catch
{
}
}
在translate.cs 理撰寫
    public static string Big5ToGb(string Text)
{
Text = UnicodeDictionary.StrToUnicode16(Text);
return ChineseConverter.Convert(Text, ChineseConversionDirection.TraditionalToSimplified);
}
public static string GbToBig5(string Text)
{
Text = UnicodeDictionary.StrToUnicode16(Text);
return ChineseConverter.Convert(Text, ChineseConversionDirection.SimplifiedToTraditional);
}
這樣就可以將整各網頁做繁簡轉換了

繁體轉簡體功能-推薦:Microsoft Visual Studio International Pack 1.0 版

Microsoft Visual Studio International Pack 是一套國產的類別庫喔,是由台灣微軟的工程師所開發的,主要是幫助 .NET 程式開發人員建立全球化的應用程式,其中包括許多功能,其中有一套我們很可能會用到的「繁簡轉換」功能,也就是「中文繁簡轉換類別庫」。

在你下載回 vsintlpack1.zip 檔案並解壓縮後,會有個 CHTCHSConv.msi 安裝檔,這個就是「中文繁簡轉換類別庫及 Add-In 工具」,安裝好之後相關檔案會放在以下目錄(好長的目錄名稱啊):

C:\Program Files\Microsoft Visual Studio International Pack\Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool

你只要將該目錄中的 ChineseConverter.dll 組件複製到你網站的 Bin 目錄下就能用了,要使用之前必須先引用其命名空間:

using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
其中只有一個 ChineseConverter 靜態類別與一個 ChineseConversionDirection 列舉(enum),使用方式很簡單,如果要將繁體字轉成簡體字可參考以下程式碼:
string TWS = "領導有策略";
string CHS = ChineseConverter.Convert(TWS, ChineseConversionDirection.TraditionalToSimplified);
如果要將簡體字轉成繁體字可參考以下程式碼:
string CHS = "领导有策略";
string TWS = ChineseConverter.Convert(CHS, ChineseConversionDirection.SimplifiedToTraditional);
夠簡單吧!

除了單純的「字對字」轉譯之外,如果使用者電腦有安裝 Microsoft Office 2007 的話(使用這個組件的主機),他還會利用 Office 2007 內建的一些「詞彙轉譯」功能,發現雖然文件說有安裝 Microsoft Office 2007 可以讓中文繁簡體轉換出來的品質更好,不過我測試了一下發現其實沒差,不知道品質好在哪裡?不過不失為一個好用的工具啦! ^_^

參考網址:http://blog.miniasp.com/post/2008/05/Recommand-Microsoft-Visual-Studio-International-Pack-1-0.aspx

好用的 Microsoft Visual Studio International Pack 在 2009/3/31 更新 Microsoft Visual Studio International Pack 1.0 SR1版。而SR1 在功能修正日文 Kana 轉換類別庫及日文 Yomi 自動完成類別庫, 其他的元件皆和 1.0 版本相同。

http://www.microsoft.com/downloads/details.aspx?FamilyID=44CAC7F0-633B-477D-AED2-99AEE642FC10&displaylang=zh-tw

也許您還沒有使用過這個好用的東西,以下是Microsoft Visual Studio International Pack 的介紹

.NET 程式開發人員要建立一個全球化的應用程式, 必須有各式各樣不同文化及語系上的不同功能. Visual Studio International Pack 中包括了一組類別庫以滿足這樣的需求. Visual Studio International Pack 1.0 版本針對亞洲的四個不同語系, 提供了以下七個不同的元件來加強 .NET Framework 在全球化(globalization)功能上的支援.

1. 東亞語系數字格式化類別庫 - 可以將數值資料格式化成中文繁體, 中文簡體, 日文以及韓文的數值大寫字串.
2. 日文 Kana 轉換類別庫 - 可以將 Kana 字元組轉換至其他日文的表示方法.
3. 日文文字對齊類別庫 - 可以在應用程式中產生出日文特有的文字對齊字串.
4. 日文 Yomi 自動完成類別庫 - 提供一個類別庫及 TextBox 控制項範例以支援可感應日文輸入法的自動完成功能.
5. 韓文自動完成TextBox 控制項- 提供一個 TextBox 控制項以支援可感應韓文輸入法的自動完成及 Intellisense 功能.
6. 簡體中文拼音轉換類別庫 - 可幫助應用程式取得簡體中文字元的拼音及筆劃等資訊.
7. 中文繁簡轉換類別庫及 Add-In 工具 - 可幫助應用程式轉換中文繁體字串至中文簡體, 或是由簡至繁體. 此元件也包括了一個
8. isual Studio 的 Add-In 工具, 可以將資源檔中的字串做繁簡轉換. 讓使用者快速的開發出兩岸三地的應用程式.

支援的作業系統:Windows Server 2003 R2 (32-Bit x86); Windows Vista Service Pack 1; Windows XP Service Pack 3
所需軟體: Microsoft Visual Studio 2005 以及 Microsoft Visual Studio 2008, Microsoft .NET Framework 2.0, Microsoft Office 2007 (可選用 - 針對中文繁簡轉換類別庫)

2009年10月7日 星期三

進入 網路芳鄰 關閉XP Guest 詢問我帳號密碼

開始>執行>gpedit.msc 電腦設定 > Windows設定 > 安全行設定 > 本機原則 > 安全性選項 下的
帳戶:Guest帳戶狀態 必須選取『已停用』

總之網路存取:共用和安全性模式用於本機帳戶必須是『傳統-本機使用者以自身身份驗證』

這樣在網路芳鄰要進入XP的電腦,就可使用自己所設定的帳號密碼登入瞜

2009年9月27日 星期日

利用javascript抓取Text的值及使用window.open會出現[object]或[object Window]的問題

抓取Text的值並在原視窗開啟連結
<a href="javascript:window.location('https://URL/a.htm?qq=' + document.form1.Text3.value + '&Sno=4091&Currency=TWD');">
<img src="img/123.gif" width="100" height="28" border="0"></a>
使用window.open會出現[object]或[object Window]的問題
<a href="javascript:void window.open('https://URL/a.htm?qq=' + document.form1.Text3.value + '&Sno=4091&Currency=TWD');">
<img src="img/123.gif" width="100" height="28" border="0">

2009年9月21日 星期一

利用 javascript 控制 播放控制面板

<div id="play" style="display:none"></div><BR>

<script language="JavaScript">
function playmv(u){
document.getElementById('play').innerHTML = '<embed id="IngodMp3" name="IngodMp3" volume="0" EnableContextMenu=false wmode="transparent" quality="high" width="180" height="40" src="http://URL/VB' + u + '" /></embed>'
}
playmv('c01001');
</script>

<a href="javascript:playmv('c01001');">001</a>
<a href="javascript:playmv('c01002');">002</a>
<a href="javascript:document.IngodMp3.play()" target=_self>播放</a>
<a href="javascript:document.IngodMp3.stop()" target=_self>停止</a>
<a href="javascript:document.IngodMp3.pause()" target=_self>暫停</a>

object 與 embed 播放影音串流語法

<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="280">
<param name="url" value="mms://URL/090901.wmv">
<param name="AutoStart" value="0">
<embed autostart="0" type="application/x-ms-wmp" width="280" src="mms://URL/090901.wmv"/>
</object>


<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="280">
<param name="url" value="mms://URL/090901.wmv">
<param name="AutoStart" value="0">
<param name="volume" value="100">
<param name="EnableContextMenu" value="-1">
<embed autostart="0" type="application/x-ms-wmp" width="280" src="mms://URL/090901.wmv"/>
</object>


<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="280">
<param name="url" value="mms://URL/090902.wmv">
<param name="AutoStart" value="0">
<param name="volume" value="100">
<param name="EnableContextMenu" value="-1">
<embed autostart="0" type="application/x-ms-wmp" width="280" src="mms://URL/090902.wmv"/>
</object>


<embed src="mms://URL/090901.wmv" width="280" align="middle" name="adsize" border="1"  volume="0" autostart=false 
EnableContextMenu=false ></embed>

2009年9月17日 星期四

教你如何防範USB病毒Autorun.inf的絕招

目前,USB病毒的情況非常嚴重。幾乎所有帶病毒的USB,根目錄裡都有一個autorun.inf,右鍵菜單多了「自動播放」、「Open」、「Browser」等項目。由於我們習慣用雙擊來打開磁盤,但現在我們雙擊,通常不是打開U盤,而是讓autorun.inf裡所設的程序自動播放。只需採用鼠標右鍵單擊打開就不會激活病毒。但若你的機子有很多人,又不能保證他們不會雙擊打開U盤,那就可以採用下面的方法。

招一、組策略關閉AutoRun功能(適合不熟悉電腦者)

如果你想一次全部禁用Windows XP的自動播放功能,那麼請按下述步驟操作:

1、單擊「開始→運行」,在「打開」框中,鍵入「gpedit.msc」,單擊「確定」按鈕,打開「組策略」窗口;

2、在左窗格的「本地計算機策略」下,展開「計算機配置→管理模板→系統」,然後在右窗格的「設置」標題下,雙擊「關閉自動播放」;

3、單擊「設置」選項卡,選中「已啟用」復選鈕,然後在「關閉自動播放」框中單擊「所有驅動器」,單擊「確定」按鈕,最後關閉「組策略」窗口。

招二、註冊表關閉AutoRun功能

在「開始」菜單的「運行」中輸入Regedit,打開註冊表編輯器,展開到

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Exploer 主鍵下,在右側窗格中找到「NoDriveTypeAutoRun」,就是這個鍵決定了是否執行CDROM或硬盤的AutoRun功能。

雙擊 「NoDriveTypeAutoRun」,在默認狀態下(即你沒有禁止過AutoRun功能),在彈出窗口中可以看到 「NoDriveTypeAutoRun」默認鍵值為95,00,00,00,附件上傳了抓圖。其中第一個值「95」是十六進制值,它是所有被禁止自動運 行設備的和。將「95」轉為二進制就是10010101,其中每位代表一個設備,Windows中不同設備會用如下數值表示:

設備名稱 第幾位 值 設備用如下數值表示 設備名稱含義

DKIVE_UNKNOWN   0101h 不能識別的設備類型
DRIVE_NO_ROOT_DIR 1002h 沒有根目錄的驅動器(Drive without root directory)
DRIVE_REMOVABLE  2104h 可移動驅動器(Removable drive)
DRIVE_FIXED  3008h 固定的驅動器(Fixed drive)
DRIVE_REMOTE 4110h 網絡驅動器(Network drive)
DRIVE_CDROM 5020h 光驅(CD-ROM)
DRIVE_RAMDISK 6040h RAM磁盤(RAM Disk)
保留 7180h 未指定的驅動器類型

在上面所列的表中值為「0」表示設備運行,值為「1」表示該設備不運行(默認情況下,Windows禁止80h、10h、4h、01h這些設備自動運行,這些數值累加正好是十六進制的95h,所以NoDriveTypeAutoRun」默認鍵值為95,00,00,00)。

招三、修改權限法

1. 點開始->運行 輸入 regedit.exe 回車

2. 打開註冊表編輯器後展開項,也是進入
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2]
3. 右鍵點MountPoints2 選擇權限
4. 依次點擊「安全中的用戶和組」,在下面的權限中都改成拒絕
5. 刷新一遍,此後即使U盤有病毒也不會激活,雙擊U盤會正常進入U盤。

招四、隱藏驅動器法(適合USB使用頻繁者,如打印工作室)

如果上面的方法都不夠徹底,還有一招就是把驅動器隱藏了,而用一個批處理文件來打開U盤。

1、打開註冊表編輯器,還是進入

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建二進制值「NoDrives」,缺省值是00000000,表示不隱藏任何驅動器。鍵值由4個字節組成,每個字節的每一位(bit)對應從A到Z的一個盤,當相應位為1時,「我的電腦」中的相應驅動器就被隱藏了。第一個字節代表從A到H的八個盤,即01為A、02為B、04為C……依此類推,第二個字節代表I到P;第三個字節代表Q到X;第四個字節代表Y和Z。U盤的盤符是接著現有盤符往下推。若你現在已經使用了C、D、E、F,那麼U盤採用G:著盤符,再插入一個U盤就用H:。此時只需將G:和H:隱藏,則插入U盤也不會在「我的電腦」裡顯示。當然,用註冊表編輯器修改註冊表操作起來較為複雜, 現在有很多專門修改註冊表的軟件,如WINDOWS優化大師中展開「系統性能優化/系統安全優化/更多設置/選擇要隱藏的驅動器」,將要隱藏的盤符前的"□"裡打"√",確定即可。

2、在桌面新建一個文本文件,輸入「start (你的盤符):」,如:「start f:\」,另存為「進入U盤.bat」,之後就通過雙擊該批處理文件來打開U盤,不僅可防病毒,使用也很方便。

招五、禁止創建autorun.inf(保護自己的USB盤)

在根目錄下建立一個文件夾,名字就叫autorun.inf。由於Windows規定在同一目錄中,同名的文件和文件夾不能共存,這樣病毒就無法創建autorun.ini文件,即使您雙擊盤符也不會運行病毒。

如何關閉隨身碟、光碟機的自動播放功能?(AutoPlay、Autorun)

一般情況下,當我們將光碟片放到光碟機中,或將隨身碟插入到USB插座的時候,通常Windows會很貼心的幫我們自動讀取光碟中的檔案,並執行自動播放的功能。如果你覺得這樣一直自動跑很煩的話,或者你擔心某些隨身碟病毒會因為自動播放功能而在自己毫無防備的狀況下讓電腦中毒的話,可以用下面方法將自動播放(AutoPlay)的功能給關閉。

依序按下〔開始〕→【執行】,開啟「執行」對話盒後,請輸入「gpedit.msc」,再按一下〔確定〕按鈕,開啟群組原則設定頁面。

先從左邊的目錄切換到「電腦設定」→「系統管理範本」→「系統」,在系統頁面中(右邊視窗)可以找到一個「關閉自動播放」的項目,請在上面按兩下滑鼠左鍵,開啟它。

接著先點選〔已啟用〕,然後在「停用自動播放在」下拉選單中點選【所有磁碟機】,然後再按下〔確定〕按鈕,即可設定完成,重開機後就可生效。

XP 如何禁止安裝軟體

為防止用戶胡亂安裝軟件,可依下列方法禁止:
先決條件:
1.使用者、非本機『administrator群組』。

2.他不是每天都要安裝軟體的用戶,不然每天得跟他講一堆道理說哪個不能裝,那個能裝。

3.當他是真的要裝軟體時,你可以馬上幫他裝。

所以這種方法一般是用在公司的公用電腦啦,使用應用程式層級較低的電腦。

步驟:
1.以系統管理員的身份登入,
2.「開始」-->「執行」,鍵入「gpedit.msc」
3. 進入群組原則的設定,在「本機電腦原則」下打開「電腦設定」/「系統管理範本」/「Windows元件」/「Windows Installer」,將「停用Windoows Installer」設定「一直停用」。

2009年9月8日 星期二

鮮芋仙藏「四高」陷阱 月營收150萬 仍作白工

「人潮等於錢潮」,這樣的商業邏輯套在鮮芋仙加盟店的身上恐怕要破功了。
鮮芋仙加盟主黃啟烈表示,常常有很多消費者不相信經營鮮芋仙會不賺錢,理由是每次到鮮芋仙買甜品常常要排隊,他說,鮮芋仙光鮮外衣下其實是潛藏著「四高」的經營陷阱。

一、開店投資成本高:

加盟主張佑光表示,鮮芋仙對外打出的廣告都是創業資金三百八十萬元起,實際加盟後,發現冷氣、機車、電腦等,很多設備都還要再自掏腰包,加一加投資額就超過五百萬元,甚至有人高達六、七百萬元。

他們自行找外面的裝潢和設備商估價後,發現鮮芋仙總部裝潢設備費用高於市價,推估鮮芋仙加盟總部開設一家加盟店,單是在裝潢設備部份就可現賺約二百萬元。而且,投入五百萬元資金,以鮮芋仙簽訂的加盟合約三年推估,相當於每個月單是設備折舊攤提就高達約十四萬元。

二、店租高:
黃啟烈說,鮮芋仙總部要求加盟主店租十五萬元以上的店面才能開店;店面租好之後,還要準備第一個月租金、二至三個月店租押金,以店租二十萬元推估,至少要再準備六十萬至八十萬元的現金,這些額外增加的資金都是當初簽約時看不到的成本。

三、原物料成本高:
黃啟烈說,總公司供應給加盟店的原物料,是透過大量採購議價的,但賣給加盟店的成本平均還較市價高出四至五成,總部又要賺一手。

四、人事成本高:
鮮芋仙目前的店面都有座位,很多產品都需要人員現場製作和服務,平均一家店要聘僱七至八名員工,人事成本高占營業額二成以上。

除此之外,有別於外帶式飲料店不必開發票,鮮芋仙目前內座式店面都要開發票,稅金也比外帶式飲料高。

張佑光自行結算去年五月至十二月的損益,營業額總共約一千二百一十五萬元,相當於每個月營業額超過一百五十萬元,這樣的業績,在鮮芋仙所有加盟店當中,算是名列前茅的,還是面臨虧損壓力。

他說,每個月扣除約三十四萬元的工資、十九萬元的店租、七十一萬元的原物料、二十三萬元的水電等營業費用,平均每個月淨利不到四萬元,若再加上每個月高達十六.六萬元的設備折舊攤提金額,每個月實際上是虧損超過十二萬元。

今年受到不景氣影響,一至四月平均月營業額已經衰退到八十萬元以下,五、六月也出現旺季不旺的現象,月營業額勉強回升到一百萬元以上,真的很辛苦。

Windows 7上市倒數 7大特色搶先看

即將在10/23於全球同步上市的Windows7,目前已進入RTM(ReleaseToManufacturing)的最後倒數階段。眾所矚目的Windows7,因具有觸、省、易、秀、快、樂、搜等7大價值,勢必引發全球的換機潮,更將改變人們使用電腦的習慣。

由於微軟Vista作業系統常因硬體資源要求高、使用介面複雜,遭到眾多使用者詬病,雖然微軟出面消毒,但還是無法阻擋消費者回頭安裝WindowsXP的行為。而將要正式上市的Windows7,不但在介面設計更符合人性化外,更進一步降低硬體的需求,甚至現在熱門套裝軟體的相容性,也超過八成以上,如知名線上遊戲、翻譯軟體、影片剪輯軟體…等等,都已可相容。

其中,像是中華英雄、魔獸世界、天堂、戰鎚、三國群英傳2等線上遊戲,皆可輕鬆執行;而Dr.eye譯典通9.0、CyberLinkPowerDirector8、非常好色7與InternetSecurityPRO3.0等套裝軟體,也都能相容於Windows7。

在硬體的需求方面,就算是一般的小筆電,也都可以輕鬆的跑Windows7,不會有遲鈍感,連開機速度都比WindowsXP還要來的快,預料將成為XP使用者跳升7的重要關鍵因素之一。

不僅如此,台灣微軟為了替Windows7暖身,還特別整理出「7大價值」,包括觸、省、易、秀、快、樂、搜等7項,更打出「電腦,就這麼簡單」的口號,希望藉此擴展使用族群,從小朋友到老人家都可以輕鬆使用Windows7。

《觸》觸控強
透過Multi-Touch功能,可直接在支援觸控的硬體,以雙指在螢幕上進行文件開啟關閉,圖檔旋轉、放大,網頁拖拉捲軸等動作,頗像是科幻電影的情境。

《省》資源省
Windows7大幅提升了記憶體的效能,不僅電力消耗低,記憶體資源需求也較少,既使同時開啟很多應用程式,也不至於拖慢電腦速度。

《易》操作易
不但簡化了使用介面,也更具人性化,像是把工作列的icon變大;還可不用開啟檔案,就可先預覽內容;也能動動手指頭將視窗自動排列,或是快速收回工作列。

《秀》秀圖示
過去遇到安裝周邊硬體,或使用USB介面工具時,常常搞不清楚。而透過Windows7就可清楚看到硬體圖示,以及詳細產品規格等資訊。像是相機、印表機、手機、隨身碟、滑鼠等裝置,不但可下載驅動程式,還可排除錯誤、故障,輕鬆管理所有硬體。

《快》開機快
一向被使用者詬病的開關機速度,在Windows7也獲得改善,而透過ActionCenter行動作業中心,進行整合備份還原與更新時,速度也將變得更快速。

《樂》享娛樂
提升多媒體娛樂功能,一直是微軟近年來的重要策略,這次將融合觸控功能,讓播放音樂、電影及電視節目,更能感受到娛樂效果。還有小遊戲和KTV可以免費下載,預期將吸引更多人的使用。

《搜》搜尋神
硬碟空間越大,檔案可以存放的數量也越多,但卻造成搜尋上的困難。在WindowsSearch上輸入關鍵字,不論檔案類型、位置,都可快速搜尋。

微軟自行開發的地圖軟體MicrosoftVirtualEarth

2009年8月31日 星期一

將物件存放在Session中會造成StateServer錯誤

無法序列化工作階段狀態。在 'StateServer' 和 'SQLServer' 模式中,ASP.NET 將序列化工作階段狀態物件,因此不允許無法序列化的物件或 MarshalByRef 物件。在 'Custom' 模式中,自訂工作階段狀態存放區執行類似的序列化作業時,也會有同樣的限制。
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。
例外詳細資訊: System.Web.HttpException: 無法序列化工作階段狀態。在 'StateServer' 和 'SQLServer' 模式中,ASP.NET 將序列化工作階段狀態物件,因此不允許無法序列化的物件或 MarshalByRef 物件。在 'Custom' 模式中,自訂工作階段狀態存放區執行類似的序列化作業時,也會有同樣的限制。

原始程式錯誤:
在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。
堆疊追蹤:
[HttpException (0x80004005): 無法序列化工作階段狀態。在 'StateServer' 和 'SQLServer' 模式中,ASP.NET 將序列化工作階段狀態物件,因此不允許無法序列化的物件或 MarshalByRef 物件。在 'Custom' 模式中,自訂工作階段狀態存放區執行類似的序列化作業時,也會有同樣的限制。]
System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1602
System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34
System.Web.SessionState.SessionStateIte......

有把物件放到Session中的話那就請改寫
因為使用State Server的話
是不可以將非序列化的物件存放在Session中
不要浪費時間找解決方式
無序列化的資料要使用State Server無解
應該著重於怎麼處理程式流程讓程式更有效率...
不要太依靠Session
把大量的物件、資料存放在Session造成Server沉重的負擔


轉http://www.evanstour.com/writing_detail.aspx?sq=122

ASP.NET StateServer 工作階段狀態模式

StateServer 模式會將工作階段狀態存放在處理序中 (稱為 ASP.NET 狀態服務),這個處理序則與 ASP.NET 背景工作處理序或 IIS 應用程式集區有所不同。使用此模式可以確保工作階段狀態在 Web 應用程式重新啟動時會保存下來,並且讓 Web 伺服陣列中的多個 Web 伺服器都能夠使用工作階段狀態。

若要使用 StateServer 模式,您必須先確定 ASP.NET 狀態服務正在做為工作階段存放區的伺服器上執行。已安裝 ASP.NET 和 .NET Framework 時,ASP.NET 狀態服務會安裝為服務。ASP.NET 狀態服務會安裝在下列位置:
systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe

若要將 ASP.NET 應用程式設定為使用 StateServer 模式,請在應用程式的 Web.config 檔中執行下列動作:
將 sessionState 項目的 mode 屬性設為 StateServer。
將 stateConnectionString 屬性設為 tcpip=serverName:42424。

依序設定步驟:
(1) 到C:\windows\Microsoft.NET\Framework\v2.0.50727這資料夾執行aspnet_state.exe
(2) 在服務中,會出現一個"ASP.NET 狀態服務"的服務項目,但是未啟用,先別急著啟用
(3) 執行regedit,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters這個目錄
(4) 設定AllowRemoteConnection為1
(5) 設定Port為要執行的Port Number
(6) 啟動"ASP.NET 狀態服務"的服務
(7) 到web.config中,將sessionState的屬性改為
mode="StateServer" stateConnectionString="tcpip=:"
(8) 重新啟動IIS即可

另外微軟MSDN也提供了使用SQL Server來存放Session的解決方案
http://support.microsoft.com/kb/317604

2009年8月26日 星期三

『語法』Embed 講解教學

Embed語法

首先,當然是先準備好你的影音檔啦!! (如WMA、WMV、ASF、MPG、AVI)
然後,在用下列語法貼上即可。
<embed src=檔案位址>

尺寸大小:
通常天空旁邊的連結框有限制寬度(大約是180 px),
所以說,我們必需在加上寬度,假如自已還要調高度的話,
那麼,語法就變成這樣了。
<embed src=檔案位址 width=寬度 height=高度>

不自動播放:
如果說,我們不想讓音樂自動播放的話,那麼即可在語法加上參數 autostart。
<embed src=檔案位址 autostart=false>

循環播放:
假如,音樂很好聽的話,我們想循環播放的話,那麼即可在語法加上參數 loop=true 。
<embed src=檔案位址 loop=true>

隱藏面版:
你想偷偷隱藏面版的話,就可以加上參數 hidden=true 。
<embed src=檔案位址 hidden=true>

另外,假如你是使用Firefox瀏覽器播放的話呢,那麼就要修一下語法了。
wma是沒有問題的。有問題的是下面兩個:

Mp3檔 <embed src=檔案位址 type=video/x-ms-asf width=寬度 height=高度 >
Rm檔 <embed src=檔案位址 type=audio/x-pn-realaudio-plugin width=寬度 height=高度 >

在語法裡面如果沒有寫任何關於音量大小的設定,播放時預設的音量大小如右上圖,大約是50%的音量。
如果希望一開始播放就以100%的最大音量播放,可以加入這句參數 Volume=0,請注意,是等於「零」,不是英文字母的大寫 O。播放時的情況如右下圖,語法範例如下:
<embed src=檔案位址 Volume=0>

只要加進這句參數 ShowStatusBar=true,播放Bar下方便會多出一行資訊視窗,如右圖。語法範例如下:
<embed src=檔案位址 ShowStatusBar=true>
這個參數是非常實用的,因為這行資訊視窗會秀出很多有用資訊如下載進度、播放進度、曲名、藝人名稱.......等等。
秀出下載進度、播放進度尤其體貼,可以讓瀏覽者大概掌握到底要等多久才會開始播放,不用癡癡望著螢幕像個傻子一樣。我個人建議用embed語法播放影音檔時最好都加上這句參數。

關於防右鍵:
各位可以試試在播放Bar上按右鍵看內容,便可看到檔案的真實位址!或是在播放影片時也可以在畫面上按右鍵看內容,也可看到檔案真實位址。加上這句參數 EnableContextMenu=false 便可防止在播放Bar或影片畫面上按右鍵。語法範例如下:
<embed src=檔案位址 EnableContextMenu=false>
可是這語法有一點點無謂,因為光是在播放面版上防堵意義不大,還要搭配整個頁面的防堵才能收到效果。所以,自己看著辦吧。

2009年8月25日 星期二

在Windows 2003上安裝Windows LIve Messenger 2009

一早忽然MSN8.1無法登入,工作平台是Windows 2003的我紛紛發出哀嚎: MSN Messenger 8.1版在登入時出現已有新版軟體的警示,不裝新版不給登入;選擇安裝新版又會因不支援Windows 2003版本,不給安裝... 這,這不是要逼人走上絕路嗎?

發現原本在Windows Live Messenger 2009的安裝檔結構改了,找不到WindowLiveInstaller\MsiSources目錄。

在一台Windows 7 VM上裝妥Live Messenger 2009,但對於檔案改放到哪裡毫無頭緒。摸索了一下,無意中發現寶藏: C:\ProgramData\Microsoft\WLSetup\Logs下有個Log檔,從安裝歷程中挖出了msi檔的儲放位置--C:\Program Files\Common Files\Windows Live\.cache

另外,由Log發現Live Messenger 2009不像先前只要一個msi就搞定,而是拆出多個安裝模組,依序安裝:

dw20shared.msi (沒有找到該檔案)
crt.msi
contacts.msi
wlc.msi
richupload.msi
wllogin.msi
wlxsuite.msi
choiceguard.msi
messenger.msi

由.cache的各子目錄取出這些檔案,在一台Windows 2003上按照順序逐一裝好,就可以用了

如何避免使用者在特定網頁表單在未經送出時意外離開

「使用者」想「離開網頁」,基於「使用者最大」的原則,瀏覽器不可能真正擋住使用者的去路,所以你的 JavaScript 是不可能「絕對阻擋」網頁離開,你只能「提醒」使用者離開此網頁,所以正確的寫法是在 function 中 return 一段字串訊息即可,如下範例:
window.document.body.onbeforeunload = function()
{
return '您尚未將編輯過的表單資料送出,請問您確定要離開網頁嗎?';
}

當你在網頁中按下 F5 重新整理或點選其他連結試圖離開網頁時,就會先出現提醒訊息

最後,還有個重點觀念,也就是當 onbeforeunload 事件被觸發的同時,如果也有其他事件被觸發的話,在其他事件中不能再修改任何 DOM 物件,因為物件處於正在卸載的狀態,所以當你在其他事件中要執行類似的修改動作,就會影發「未指定的錯誤」的錯誤訊息

所以在撰寫時必須特別注意這個潛在可能發生的錯誤。

當你要進行表單送出時總不能還出現這個離開網頁的提示框吧!所以你還必須在表單的 Submit 按鈕特別加上一段 JavaScript 將 事件取消。
<input type="submit" value="送出" 
onclick="window.document.body.onbeforeunload=null;return true;" />


參考 http://blog.miniasp.com/post/2009/08/How-to-avoid-page-reload-or-redirect-by-incident.aspx

電子報網頁版型設計建議

由於 Outlook 2007 的一個嚴重缺失,又讓電子報設計的創意再更少一些了,由於能用的CSS屬性實在不多,光是「背景圖」就很惱人了,設計師只能用簡單的背景色彩鋪陳網頁的版面,至於許多創意的背景圖設計就只能用單張圖片顯示了。

以下是依我個人經驗對設計的建議:

因為現在許多人都使用像 Gmail, Hotmail 等 WebMail 的方式收信,所以郵件中若是有使用太多會影響 WebMail 原有版面的部分應該全部都會被刪除,導致版型亂七八糟的。

盡量不要用 CSS 來排版,用傳統的 TABLE 排版方式是比較安全的作法!
注意:DIV標籤在 Outlook 2007 中「竟然不支援 CSS 中的 width 這個屬性」,所以你用 DIV 包網頁是沒用的!

版型最外層最好用一個 TABLE 包裹住整個網頁,並設定固定的寬度,建議寬度為 700px 以內。

如果網頁的頁首部分會用到漂亮而複雜的底圖,建議將整塊頁首都做成一張圖片,缺點是這裡就無法再貼上什麼動態的文字了。

不要在電子報的網頁中放入「表單」,因為 Outlook 2007 不支援,且在 Outlook 2003 中使用表單也無法用快速鍵(如用 TAB 切換欄位),實在不方便又不實用。有很多人會在電子報中嵌入「問卷」實在不夠明智,都不知道填寫的人很痛苦,不小心按下空白鍵,Outlook會自動跳到下一封信去了,再回來的時候所有輸入的東西都消失了。=.=''

文字與圖片的地方盡量切乾淨,版面設計的時候就不要設計「疊在一起的樣子」。

如果要將電子報的版型加上圖片的外框,就用TABLE設計九宮格把圖放在四邊的 TD 裡,但如果電子報的長度不固定的話,建議不用做這樣的設計。

盡量少用 GIF 動畫,因為在 Outlook 2007 中看不到這些動畫。

不要用 PNG 圖檔做透明背景。

重點就是
不支援背景圖像(HTML 或CSS)
糟糕的背景色支援:個別div或table的背景顏色可正常顯示,巢狀結構的div或table則會消失。
不支援Flash及Plugins
不支援CSS、浮游物件
不支援列表清單替代圖示
不支援CSS 定位
不支援動態GIF

另外,以下是一些「非常強烈建議不要用」的設計方式:
1.不要使用任何 JavaScript 或任何像 onclick, onkeypress, onmouseover 等等的事件(event)!
2.不要在電子報網頁中嵌入 Flash 動畫。
3.不要用 IFRAME 嵌入其他網頁。
4.若要製作圖框,建議切圖將文字包起來,不要使用背景圖的方式
5.另一種做法是用背景色來取代背景圖框架的做法

參考http://blog.miniasp.com/post/2007/11/Recommandation-on-e-Newsletter-Template-design.aspx

SQL 找出資料庫的資料表,資料表的欄位名,資料表的PK欄位

--找出資料庫裡所有的資料表
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME

--依資料表名稱找出所有欄位資訊
SELECT COLUMN_NAME,ORDINAL_POSITION,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'blessing'

--依資料表名稱找出此表的PK欄位
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'blessing'

2009年8月21日 星期五

C# 匯出WORD檔案

Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=test.doc");//word檔名
Response.ContentType = "application/vnd.ms-word";
Response.Charset = "";
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
DataGrid dg = new DataGrid();
dg.DataSource = this.SqlDataSource1.Select(DataSourceSelectArguments.Empty);
dg.DataBind();
dg.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();

MSSQL 今天星期幾

select datepart(dw, '20090820')

select CASE datepart(dw, '20090820')
WHEN '1' THEN '星期日'
WHEN '2' THEN '星期一'
WHEN '3' THEN '星期二'
WHEN '4' THEN '星期三'
WHEN '5' THEN '星期四'
WHEN '6' THEN '星期五'
WHEN '7' THEN '星期六' END

相關網站 http://javascriptnote.blogspot.com/2009/07/ms-sql.html

2009年8月17日 星期一

C# 字串函數

取子字串
語法:字串變數.Substring(左起始位數 , 取幾位)
範例:string s1 = str.Substring(0,2);

右取字串
很可惜的是C#如同java , C , C++ 一樣,並未提供太多的字串函數可以用,所以想右取字串,
只好自己想辦法囉,以下提供一個小方法,運用數學邏輯方式來做
語法:字串變數.Substring(全部字串長度 - 應取字串長度 , 應取字串長度)
範例:
想取一個長度9位(不足的左補0)的字串,一般轉檔常會有這樣的需求
string s1 = " 3000 ";   
if (s1 .Length < 9)
s1 = ("000000000" + s1 ).Substring(("000000000" + s1 ).Length-9, 9);

字元串相加
語法:System.Text.StringBuilder sb = new System.Text.StringBuilder()
範例:System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("a");
sb.Append("b");
sb.Append("c");

註:大量字串相加時,效能比用 " + " 的方式來的好

Javascript刷新頁面的幾種方法

Javascript刷新頁面的幾種方法
1 history.go(0)
2 location.reload()
3 location=location
4 location.assign(location)
5 document.execCommand('Refresh')
6 window.navigate(location)
7 location.replace(location)
8 document.URL=location.href

自動刷新頁面的方法:
1.頁面自動刷新:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒刷新一次頁面.

2.頁面自動跳轉:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20;url=http://www.wyxg.com">
其中20指隔20秒後跳轉到http://www.wyxg.com頁面

3.頁面自動刷新js版
<script language="JavaScript">
function myrefresh()
{
window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒刷新一次
</script>

ASP.NET如何輸出刷新父窗口腳本語句
this.response.write("<script>opener.location.reload();</script>");

this.response.write("<script>opener.window.location.href = opener.window.location.href;</script>");

Response.Write("<script language=javascript>opener.window.navigate(''你要刷新的頁.asp'');</script>")

JS刷新框架的腳本語句
//如何刷新包含該框架的頁面用
<script language=JavaScript>
parent.location.reload();
</script>

//子窗口刷新父窗口
<script language=JavaScript>
self.opener.location.reload();
</script>
( 或 <a href="javascript:opener.location.reload()">刷新</a> )

//如何刷新另一個框架的頁面用
<script language=JavaScript>
parent.另一FrameID.location.reload();
</script>

如果想關閉窗口時刷新或者想開窗時刷新的話,在<body>中調用以下語句即可。

<body onload="opener.location.reload()"> 開窗時刷新
<body onUnload="opener.location.reload()"> 關閉時刷新

<script language="javascript">
window.opener.document.location.reload()
</script>

指定控制項TextBox按下enter後去觸發ImageButton的按鈕

VB
Me.TextBox1.Attributes.Add("onkeypress", "if( event.keyCode == 13 ) { document.getElementById('" + Me.ImageButton1.ClientID + "').focus(); }")

C#
this.txt_Acc.Attributes.Add("onkeypress", "if( event.keyCode == 13 ) { document.getElementById('" + this.btn_Login.ClientID + "').focus(); }");

2009年8月13日 星期四

MSSQL 補0語法

如下面語法,想補多少0就補多少0
select right('0000'+欄位名稱,4) from 資料表

如何清除網路芳鄰的記憶密碼

在連結到網路芳鄰的時候.填入帳號密碼後勾選了"記憶密碼"
現在想用另一個帳號密碼登入時會發現沒有可以更改的地方....
因為權限的關係.因此會無法進入一個設限比較高的資料夾...
這時就必須把原本的記憶密碼給刪除掉才行了~~
"開始功能表"-->"執行"-->鍵入"control userpasswords2"後-->"ENTER" - 依下圖所示操作


2009年8月11日 星期二

Windows Edit Tool 電腦高手、MIS必備的系統修改工具!

這個小程式是由台灣虎尾科技大學碩士班的「林侑諴」開發的小工具,大部分是匯集幾種台灣電腦使用者或MIS比較常使用到、比較常修改的系統調校與設定功能,簡化了一堆複雜的登錄檔編輯與設定工作,通通把這些調整全部集中在一個小小程式中,讓我們可以很快、很方便的幫Windows修改名稱、加快視窗顯示速度、提昇NTFS效率、隱藏磁碟機、隱藏開始功能表裡的功能、禁用USB隨身碟、禁用IE、自動登入、限用光碟機...等等,算是個相當簡單實用的小工具。

目前這個程式經過幾次的改版後,看起來功能豐富很多,下載回來之後也不用另外安裝,直接按兩下即可使用。不過裡面有部份功能僅適用於XP、部份僅適用於Vista,目前是以文字標示的方式來顯示,還沒有讓程式自動偵測系統版本來顯示或隱藏用不到的功能,所以使用時還是要小心不要按錯了

軟體名稱:Windows Edit Tool
軟體版本:1.6.6
軟體語言:繁體中文
軟體性質:免費軟體
檔案大小:415KB
系統支援:Windows XP/Vista
官方網站:林侑諴
軟體下載:按這裡下載點2
系統需求:系統需支援 .Net Framwork 2.0以上版本

NetWorx 網路流量監測軟體,中文版

很久之前ADSL網路速度還不是很快的時代,很流行類似「DU Meter」這樣的軟體。而下面介紹的這個NetWorx,也是一款可以測量網路連線速度與其他連線資訊的工具。跟其他工具不同的是,NetWorx內建包含中文在內的多國語言介面,而且還是個免費軟體。

除了簡單的網路流量統計與監測功能之外,還提供了完整的流量統計介面、流量限額提醒功能、路由追蹤、PING與NetStat...等工具,讓我們可以在視覺化的簡易操作介面中,更方便的檢測目前電腦的網路速度與流量統計資訊。

軟體名稱:NetWorx
軟體版本:5.0.1
軟體語言:中文(內建多國語系)
軟體性質:免費軟體
檔案大小:1.12MB
系統支援:Windows 2000/XP/2003/Vista/7
官方網站:http://www.softperfect.com
軟體下載:http://www.softperfect.com/download/freeware/networx_portable.zip

2009年8月9日 星期日

抓出Entity Framework的SQL指令

最近在研究Entity Framework..發現EF真的蠻不錯用的..尤其在Linq熟得時候..EF就可以很得心應手..今天在寫的時候..覺得EF丟出的指令還是要試著去了解..因為有時複雜的Linq to Entity還是需要看看怎樣寫才能丟出有效率的SQL Statement..下面就是簡單的兩個方法去抓出SQL Statement..
第一種方法
using (NORTHWNDModel.NORTHWNDEntities db = new NORTHWNDModel.NORTHWNDEntities())
{
var aaaa = db.Orders.Select(a => new { a.ShipName, a.ShipCity }).Take(10);
ObjectQuery oq = aaaa as ObjectQuery;
if (oq != null)
{
string SQLStr = oq.ToTraceString();
Response.Write(SQLStr);
}
}
第二種方法
using (NORTHWNDModel.NORTHWNDEntities db = new NORTHWNDModel.NORTHWNDEntities())
{
var aaaa = db.Orders.Select(a => new { a.ShipName, a.ShipCity }).Take(10);
MethodInfo mi = aaaa.GetType().GetMethod("ToTraceString");
if (mi != null)
Response.Write(mi.Invoke(aaaa, null).ToString());
}

第一種方法效率好很多..如果可以就用第一種方法ㄅ

轉http://bibby.be/search?updated-max=2009-05-19T22%3A30%3A00%2B08%3A00&max-results=7

用Gridview來群組小計

我的作法是在GridView_RowDataBound裡處理
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//兩個為一組加總
if (e.Row.RowIndex > 0 && e.Row.RowIndex % 2 == 1) {
GridViewRow gvr = new GridViewRow(-1, -1, DataControlRowType.DataRow,DataControlRowState.Normal);
TableCell tc = new TableCell();
double sum = Convert.ToDouble(GridView1.Rows[e.Row.RowIndex - 1].Cells[1].Text) + Convert.ToDouble(e.Row.Cells[1].Text);
tc.Text = sum.ToString();
tc.HorizontalAlign = HorizontalAlign.Right;
tc.ColumnSpan = 2;
gvr.Cells.Add(tc);
e.Row.Parent.Controls.Add(gvr);
}}}

2009年8月4日 星期二

MSSQL Server 管理監控效能的指標

建議使用以下的itam來分析的...

資源 效能物件 效能計數器 效能瓶頸條件 建議的效能調整方法
記憶體 Memory Pages/Sec 5 以下 增加記憶體大小
記憶體 Memory Available MBytes 100 MB以下 同上
處理器 Processor % Processor Time 75% 以下 升級處理器速度或增加處理器個數
處理器 System Processor Queue Length 2 以下 同上
硬碟 PhysicalDisk Avg. Disk Queue Length 2 以下 1. 換更快速的磁碟機
2. 資料庫檔案的檔案群組重新規劃分散於不同的磁碟陣列
硬碟 PhysicalDisk Avg. Disk Read Queue Length 2 以下 同上
硬碟 PhysicalDisk Avg. Disk Write Queue Length 2 以下 同上

記憶體 Buffer Manager Buffer Cache Hit Ratio 90 以下 增加記憶體大小
記憶體 Memory Manager Target Server Memory 超過實體記憶體大小 增加記憶體大小
記憶體 Memory Manager Total Server Memory 70~80% 以上 增加記憶體大小
tempdb Access Methods Worktables From Cache Ratio 愈高愈好
tempdb Databases Data File Size 可以得知是否持續增加
交易記錄檔 Databases Log File Size 10~25%
Date File Size 備份或清除交易記錄檔,然後壓縮檔案
交易記錄檔 Databases Percent Log Used 70~80% 以上 備份或清除交易記錄檔

也可使用網管軟體來監控(ApplicationsManager)

除了透過 Performance Monitor 來監控伺服器的效能狀態外
很多時候,效能的瓶頸來自於
1.伺服器的組態設定是恰當?(如 Memory 給定的值與作業系統本身記憶體空間的搭配)
2.tempdb 的空間是否足夠?
3.master db的空間有沒有給大一點(預設是30MB,可以加大一點)
4.每個 database 的 transaction log 空間是否足夠?(比例可設為 5:1 即 100 MB DB 搭配 20 MB Log)
5.有沒有將 Auto Shrink 選項勾起來
6.資料庫備份的模式是否搭配得宜?

除此之外,更多的效能瓶頸來自於
1.SQL Command 下得是否合宜?
2.Table 本身的 Index 是否有妥善的規劃?
3.甚至於您的 Primany Key 的定義是否恰當(數字與文字當 Primary Key的效能差異很大,數據需查)?

要觀測 SQL Command 的執行成本,可以利用 Query Analyzer 來執行 SQL Command 時,
將 Execution Plan 選項打開,可以看出 SQL Command 的執行成本以及所使用的 Index,
來驗證您所建立的 Index 是否恰當

如何避免 SQL Server 資料庫的交易記錄檔超出預期大小

在 SQL Server 2000 和 SQL Server 2005 中,每個資料庫至少都包含一個資料檔以及一個交易記錄檔。SQL Server 實際上會將資料儲存在資料檔中。交易記錄檔則是儲存您在 SQL Server 資料庫中執行的所有修改的詳細資料,以及執行每項修改時的詳細交易資料。因為交易完整性被視為 SQL Server 的基本特性,因此無法關閉 SQL Server 中,詳細交易資料的記錄功能。

交易記錄檔會依照邏輯分成較小的區段,稱之為虛擬記錄檔。在 SQL Server 2000 中,您可以設定交易記錄檔依照需要來擴充。交易記錄檔的擴充範圍可由使用者決定,或者也可以設定為使用所有的可用磁碟空間。SQL Server 對交易記錄檔大小所做的任何修改 (例如,截斷交易記錄檔或擴充交易記錄檔),在執行時都是以虛擬記錄檔為單位。

如果對應於 SQL Server 資料庫的交易記錄檔已滿,而且您已經設定了讓交易記錄檔自動擴充的選項,則交易記錄檔將會以虛擬記錄檔為單位來進行擴充。有時候,交易記錄檔可能會變得非常大,而導致磁碟空間不足。當交易記錄檔擴充到用完所有的可用磁碟空間,而無法再繼續擴充時,您就無法再對資料庫執行任何資料修改的作業。此外,如果因為沒有空間可供交易記錄檔進行擴充時,SQL Server 可能會將資料庫標示為可疑 (Suspect)。

縮減交易記錄檔的大小
如果要復原超出預期限制的交易記錄檔,您必須縮減交易記錄檔的大小。如果要執行這項操作,必須截斷交易記錄檔中的非現用交易,並且壓縮交易記錄檔。

截斷交易記錄檔中的非現用交易
當交易記錄檔超出預期限制時,必須立即備份交易記錄檔。在建立交易記錄檔的備份時,SQL Server 會自動截斷交易記錄檔中的非現用部份。交易記錄檔中的非現用部份包含已經完成的交易,因此,在復原過程中,SQL Server 不會再用到交易記錄檔。SQL Server 會重新使用交易記錄檔中已截斷的非現用空間,而不是讓交易記錄檔繼續擴充並且使用更多的空間。

壓縮交易記錄檔
備份作業或截斷方式都不會縮減記錄檔的大小。如果要縮減交易記錄檔的大小,必須壓縮交易記錄檔。如果要將交易記錄檔壓縮成所需的大小,並且移除未使用的頁面,必須使用 DBCC SHRINKFILE 作業。但是,DBCC SHRINKFILE Transact-SQL 陳述式只能壓縮記錄檔內的非現用部份。

轉 http://support.microsoft.com/kb/873235/zh-tw

2009年8月2日 星期日

ASP.Net 讀取Word檔, 點選後出現另存新檔(SaveAS)對話框 (使用C#)

ASP.Net 讀取Word檔, 點選後出現另存新檔(SaveAS)對話框 (使用C#)

//呼叫方法
DownloadFile("aa.doc", System.IO.File.ReadAllBytes(context.Server.MapPath("/temp/aa.doc")));

private void DownloadFile(string FileNameWhenUserDownload, byte[] FileContent)
{
Response.ClearHeaders();
Response.Clear();
Response.Expires = 0;
Response.Buffer = true;
Response.AddHeader("Accept-Language", "zh-tw");
Response.AddHeader("content-disposition", "attachment; filename=" + FileNameWhenUserDownload);
Response.ContentType = "Application/msword";
Response.BinaryWrite(FileBody);
Response.End();
}

如何在ASP.NET中下載檔案

如何透過ASP.NET來下載檔案,這個問題可大可小,我們先從小的開始。當我們要讓使用者下載一個檔案,最簡單的方式是透過Response.Redirect指令:

  Response.Redirect("test.doc")

您可以把上面這行指令放在Button的Click事件當中,當使用者按下按鈕之後,網頁就會被轉址到該word檔,造成下載的效果。

但是這樣的下載有幾個問題:
1.無法下載不存在的檔案:例如,我們若是想把程式動態(臨時)產生的文字,當作一個檔案下載的時候(也就是該檔案其實原先並不是真的存在,而是動態產生的),就無法下載。
2.無法下載儲存於資料庫中的檔案:這是類似的問題,該檔案並沒有真的存在,只是被存放在資料庫中的某個位置(某筆記錄中的某個欄位)的時候,就無法下載。
3.無法下載不存在於Web資料夾中的檔案:檔案確實存在,但該資料夾並不是可以分享出來的Web資料夾,例如,該檔案的位置在C:\winnt,您總不會想要把該資料夾當作Web資料夾吧?這時候,由於您無法使用Redirect指向該位置,所以無法下載。
4.下載檔案後,原本的頁面將會消失。

典型的狀況是,我們要讓使用者下載一個.txt文字檔,或是.csv格式的Excel檔案,但是...

這個檔案可能是透過ASP.NET程式動態產生的,而不是確實存在於Server端的檔案;
或是它雖然存在於伺服器端的某個實體位置,但我們並不想暴露這個位置(如果這個位置公開,很可能沒有權限的使用者也可以在網址列上輸入URL直接取得!!!)
或是這個位置並不在網站虛擬路徑所在的資料夾中。(例如C:\Windows\System32...)

這時候,我們就得採用不同的方式:
Shared Function DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FileBody As String)
  WebForm.Response.ClearHeaders()
  WebForm.Response.Clear()
  WebForm.Response.Expires = 0
  WebForm.Response.Buffer = True
  WebForm.Response.AddHeader("Accept-Language", "zh-tw")
  '檔案名稱
  WebForm.Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) & Chr(34))
  WebForm.Response.ContentType = "Application/octet-stream"
  '檔案內容
  WebForm.Response.Write(FileBody)
  WebForm.Response.End()
End Function

上面這段程式碼是下載一個動態產生的文字檔,若這個檔案已經存在於伺服器端的實體路徑,則可以透過底下的函式:
Shared Sub DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FilePath As String)
  WebForm.Response.ClearHeaders()
  WebForm.Response.Clear()
  WebForm.Response.Expires = 0
  WebForm.Response.Buffer = True
  WebForm.Response.AddHeader("Accept-Language", "zh-tw")
  '檔案名稱
  WebForm.Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) & Chr(34))
  WebForm.Response.ContentType = "Application/octet-stream"
  '檔案內容
  WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath))
  WebForm.Response.End()
End Sub


上面這兩個下載檔案的的函式,應可解決大多數開發人員在ASP.NET當中的檔案下載問題。

轉 http://studyhost.blogspot.com/2007/10/aspnet.html

修復裝置管理員,事件檢視器損毀修復

修復裝置管理員:
本機服務的視窗 開始.. 執行.. 輸入 services.msc PLUG and PLAY 自動.. 已啟動..

登錄編輯器 開始.. 執行.. 輸入 Regedit ( 2000 版建議用 regedt32 )

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
滑鼠移至 Enum 按右鍵.點選「使用權限」
點選 Administrators ( 或 system ) 按下"進階"
在下方『從父項繼承到子物件的權限項目,以顯示於此套用到子物件的項目物』打勾. 按"套用".. "確定"..

======================================
修復事件檢視器 :

1. 去服務 ( 開始.. 執行.. 輸入 services.msc ) 將 EventLog 的 SERVICE 設定成停用
2. 重新啟動電腦 ( 這時一定會有錯誤訊息, 不用理他 )
3. 將 C:\ winnt \ system32 \ config \ Sysevent.Evt ( 也就是損毀的系統事件 ) 刪除
4. 再將 SERVICE 設定成自動
5. 重新啟動電腦
6. 這時會重新建新的事件檔案

2009年7月30日 星期四

用JavaScript寫物件

<script type="text/javascript">   
employee = function(name, age) {
this.name = name;
this.age = age;
this.talkToYou = function() {
alert("hello I'm " + this.name + " I'm " + this.age + " years old");
}
}
var cloudio = new employee("cloudio", "27");
cloudio.talkToYou();
</script>
employee = function(name,age){...}這邊是JavaScript物件的寫法
而function(name,age)等於建立物件的實例時給的初始值
this.name是物件中的欄位
this.talkToYou = function(){}這是建立物件method的寫法

ASP.NET傳值的3個方法 (Response.Redirect、Server.Transfer、Server.Execute)

ASP.NET傳值的3個方法 (Response.Redirect、Server.Transfer、Server.Execute)

◆Response.Redirect
 是直接下一個HttpRequest出去,它並沒有將來源Form的相關物件資料也一併傳出去。

 伺服端是使用QueryString物件集合取出資料,其語法:
 Request("FieldName")
 Request.QueryString("FieldName")

◆Server.Transfer
 將目前表單Form中的資料送到我們指定的表單,所以,可以夾帶的訊息也比較多~
 Server.Transfer,只能傳送在我們Server上的所屬網頁。
 (Server.Transfer方法的轉向操作完全在Web伺服器完成)

 在伺服端使用Form物件集合取出資料,其語法:
 Request(("FieldName")
 Request.Form("FieldName")

◆Server.Execute
 它和Server.Transfer功能很相像。
 主要的差別在於,Server.Execute在轉到xx.aspx執行完成後,還會返回到原本的頁面繼續處理。
 (Server.Execute方法像主程式呼叫副程式,當轉向執行完成後,還會回到呼叫的程式)
----------------------------------------------------------------------------------------
Response.Redirect 與 Server.Transfer 差別 (因為Server.Execute ^^!!偶很少使用,暫不比較)

目地對象:Response.Redirect 可以切換到任何的網頁。
     Server.Transfer 只能切換到同目錄或子目錄的網頁。

安全性 :Response.Redirect後,url會變成你所指向的新網頁。
     Server.Transfer 後,url不變,隱藏了新網頁的url及附帶的參數值(具有保密功能)。

傳遞容量:指網址後面所附帶的參數,
     Response.Redirect能傳遞的大小,以2KB為限。
     所以超過2KB時...請使用Server.Transfer吧。

速度  :Response.Redriect是最快的,也是最直接滴!

轉 http://blog.xuite.net/sunnysoap/r/15252411

Javascript 自訂函數,多個回傳值

Javascript 自訂函數,多個回傳值的範例如下:

<html>
<head>

<script type="text/javascript">
function myFunction()
{
return (["Hello, have a nice day!","See you !"]);
}
</script>

</head>
<body>
<script type="text/javascript">
var a, b;
[a,b] = myFunction();
document.write(a + "<P>" + b)
</script>
</body>
</html>

JavaScript中去執行C#的程式

<script>
function redir()
{
window.location.href="<% = strURL.toString() %>";
}
</script>

C#使用VB MY物件

如何在 C# 中調用 VB.Net 2005 的 My 物件及其他函數
相信玩過 VB 2005 的朋友都知道它內建了個 My 物件,功能強大使用方便。
My 物件將特定功能封裝,無需宣告,不用建個體,直接使用,提供 VB 開發者輕鬆建構應用程式。

My.Application 物件 存取應用程式資訊和服務。
My.Computer 物件 存取主機電腦及其資源、服務和資料。
My.Forms 物件 存取目前專案中的表單。
My.Log 物件 存取應用程式記錄檔。
My.Request 物件 存取目前的 Web 要求。
My.Resources 物件 存取資源項目。
My.Response 物件 存取目前的 Web 回應。
My.Settings 物件 存取使用者和應用程式層級設定。
My.User 物件 存取目前使用者的安全性內容。
My.WebServices 物件 存取目前專案所參考的 XML Web Service。

要使用前請先加入參考 "Microsoft.VisualBasic"
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.ApplicationServices;
using Microsoft.VisualBasic.CompilerServices;
using Microsoft.VisualBasic.Devices;
using Microsoft.VisualBasic.FileIO;
using Microsoft.VisualBasic.Logging;
using Microsoft.VisualBasic.MyServices;

C# 調用VB.Net 2005 My 物件Computer.Network.IsAvailable來檢查目前網路連線狀態
if (new Computer().Network.IsAvailable)
{
MessageBox.Show("網路連線正常!!");
}
else
{
MessageBox.Show("無法連線網路!!");
}

ASP.Net C# call javascript 方法

第一種
gridview.Rows[i].Attributes.Add("onclick", "ClickRow(this);");
imgbtnDelete.OnClientClick = "ClickRow(this);";

第二種
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<> script language=\"javascript\" ResetState(); changeState(); <>/script");

轉 http://blog.xuite.net/yan.kee/CSharp/25062340

ASP.NET的程式來控制IE上的Toolbar

在Page_load裡,
將所要用button 的 onclick事件,
依下列的方式寫出
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
btn_Test.Attributes("onclick") = "javascript:window.open('ActQuery01.aspx',null,'height=700,width=600,top=140,left=200,resizable=no,status=no,toolbar=no,menubar=no,location=no'); "
End Sub

網頁顯示出後,按 btn_Test ,就可呼叫出 ActQuery01.aspx的網頁,功能一切正常!

[Javascript]主網頁傳值給iframe頁面,或iframe頁面傳值給主網頁的應用

a.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>A</title>
</head>
<body>
<div>
A.htm
<input type="text" id="T1" size="20" />
<input type="button" value="送出↓" onclick="SendMsg()" />
<iframe src="b.htm" id="iframe" width="100%" height="100%"></iframe>
</div>
</body>
</html>

<script type="text/javascript">
function SendMsg()
{
var ifrmae = document.getElementById('iframe');
ifrmae.contentDocument.getElementById("T1").value = document.getElementById("T1").value;
}
</script>

b.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>B</title>
</head>
<body>
<div>
B.htm
<input type="text" id="T1" size="20" />
<input type="button" value="送出↑" onclick="SendMsg()" />
</div>
</body>
</html>

<script type="text/javascript">
function SendMsg()
{
parent.document.getElementById("T1").value = document.getElementById("T1").value;
}
</script>

轉 http://www.dotblogs.com.tw/puma/archive/2008/11/13/5982.aspx

window.open (視窗開啟及元件控制的功能)

window.open('網址','網頁名','元件')

元件有以下幾個可以控制
top 數字 視窗距上方像素
left 數字 視窗距左像素
width 數字 視窗寬度像素
height 數字 視窗高度像素
toolbar yes/no 視窗是否有工具列
menubar yes/no 視窗是否有應用選項
status yes/no 視窗是否有訊息的狀態列
scrollbars yes/no 視窗是否有捲軸
resizable yes/no 使用者是否能改變視窗的大小

開啟一個長寬200px以及為沒有toolbar的視窗。
<a href="javascript://" 
onClick="window.open('0207.htm','','menubar=yes,status=yes,toolbar=no,width=200,height=200')">
開啟一個長寬200px以及為沒有toolbar的視窗。
</a>


開啟一個長寬200px以及為沒有toolbar、訊息欄的視窗。
<a href="javascript://" 
onClick="window.open('0207.htm','','menubar=yes,status=no,toolbar=no,width=200,height=200')">
開啟一個長寬200px以及為沒有toolbar、訊息欄的視窗。
</a>


開啟一個長寬200px以及為沒有toolbar、menubar和訊息欄的視窗。
<a href="javascript://" 
onClick="window.open('0207.htm','','menubar=no,status=no,toolbar=no,width=200,height=200')">
開啟一個長寬200px以及為沒有toolbar、訊息欄的視窗。
</a>


轉 http://www.csie.nctu.edu.tw/~yctsao/t3/0207.htm

JavaScript物件 - Window (視窗屬性)

Window (視窗屬性)

window.name
視窗名稱,想要控制一個視窗內的元件,必須先指定這個視窗的名稱,也就是在<frame>中所定的窗格名稱。
window.top
不論這個視窗內有多少個Frame,top指的是這全部視窗。
window.parent
指這個包含這個Frame的父系窗格。也就是包括在<frameset>..</frameset>之間的窗格。
window.self 指目前這個Frame。

可用的方法
.open()
可以開啟並指定一個視窗內的屬性及元件。如:
window.open(‘1.htm’,’test’,’top=100,left=100’)
當執行這個script時,會出現一個瀏覽器視窗在高度100px,左邊距100px,指定視窗名稱為test,而它的網址是1.htm。

.close()
可以關閉目前的視窗。如:
window.close();
當執行這個script時,會將目前的視窗關閉。

.focus()
可以定焦點在某個視窗上。如:
window.focus();
當執行這個script時,會將視窗定焦,並置於最上層。通常是用在一些會自動pop出來的廣告。
.blur()
window.blur();
當執行這個script時,會將視窗模糊化。這個比較不常用。
.stop()
window.stop();
當執行這個script時,會中止目前視窗下載網頁的動作。
.home()
window.home();
當執行這個script時,會將網址移到瀏覽器預定的首頁。

.print()
window.print();
執行這個script時,能夠出現印表機列印網頁的視窗。不過如果是兩個Frame以上的話,必須要先將想要列印的窗格定焦才行。例如列印網頁的按鈕在Frame[0],可是想要列印Frame[1]的網頁內容,那就要先將Frame[1]定焦。
window.frame[1].focus();
window.print();

轉 http://www.blogger.com/post-create.g?blogID=8764099955400697804

2009年7月24日 星期五

如何抓SQL server 欄位名稱?

抓MSSQL server中某table 所有的欄位名稱
For I = 0 To rs.Fields.Count-1
Response.write rs(I).Name
Next

rs(I).Name 讀取第I欄的欄位名稱

2009年7月21日 星期二

MSSQL 如何取得 當月的總天數 或 日期相減天數

當月的總天數


DateTime.DaysInMonth(年, 月)
例如:
DateTime.DaysInMonth(2005, 2)的值是28

日期相減天數
SELECT DATEDIFF(day,'2011/05/01',GETDATE())

2009年7月15日 星期三

Google祭出優惠 新註冊客戶可免費打3600元關鍵字廣告

搜尋引擎龍頭Google 14日宣布,首度在台推出關鍵字廣告服務優惠方案,即日起至7月31日前,凡在官網註冊的新客戶,可享有15天免費投放金額新台幣3600元的關鍵字廣告優惠,但須於今年8月15日前使用完畢,逾期無效。

Google關鍵字廣告Google AdWords,即網友平常看到的Google右側廣告,當使用者輸入查詢關鍵字時,贊助該廣告關鍵字的廠商所屬的的廣告便會在查詢結果的右方出現。其計費方法並不是以曝光次數來計算, 而是以廣告被點選次數來收費,每個關鍵字依熱門程度而有不同的收費,廠商可就廣告預算事先設定上限。

一般來說,關鍵字廣告服務通常是受到大企業的青睞,Google AdWords在台灣的客戶也是如此,遍佈及於科技、線上遊戲、社群網站與傳統產業等。這項在台首度推出的「Google AdWords廣告優惠方案」,曾在今年4月也在澳洲、紐西蘭亮相,Google台灣區總經理簡立峰表示,希望能為佔台灣企業97%以上的中小企業提供具體的網路行銷優惠方案,提升品牌能見度及創造業務佳績。

Google提醒,此優惠只適用新註冊帳戶,不適用現有客戶。此優惠不得轉讓、出售或交換。每位廣告客戶只可申請優惠一次;新帳戶的帳單登記地址必須為台灣,海外用戶並不適用;如廣告客戶的廣告費用超出此試用優惠額,將要繳付多出的廣告費,如果不想繳付額外的款項,必須停止廣告。

我也有個朋友在「維思資訊」,有需要的朋友可以找他喔! - 電話:02-89904909#20 蔡小姐

2009年7月8日 星期三

利用ASP.NET AJAX的Timer讓GridView每隔一段時間做到自動換頁的功能

利用timer每隔一段時間,讓gridview自動跳頁並且更新gridview的內容
asp.net(c#) aspx檔案
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridviewAutoPage.aspx.cs"
Inherits="GridviewAutoPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>GridviewAutoPage</title>
<meta http-equiv="Page-Enter" content="blendTrans(duration=1)" />
<meta http-equiv="Page-Exit" content="blendTrans(duration=1)" />
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="1">
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
</div>
<asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
</asp:Timer>
</form>
</body>
</html>

aspx.cs檔案
using ...System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class GridviewAutoPage : System.Web.UI.Page
...{
protected void Page_Load(object sender, EventArgs e)
...{
if (!IsPostBack)
...{
LoadData();
}
}

protected void LoadData()
...{
this.GridView1.DataSource = new string[] ...{ "Dotblogs", "F6 Team", "puma" };
this.GridView1.DataBind();
}

protected void Timer1_Tick(object sender, EventArgs e)
...{
if (this.GridView1.PageCount > 1)
...{
if (this.GridView1.PageIndex == this.GridView1.PageCount - 1)
...{
this.GridView1.PageIndex = 0;
LoadData();
}
else
...{
this.GridView1.PageIndex = this.GridView1.PageIndex + 1;
LoadData();
}
}
}
}

ASP.NET動態產生meta資訊的應用,時間倒數10秒去另一網頁

一般轉址的寫法
<meta http-equiv="refresh" content="10; url=http://www.dotblogs.com.tw/puma/" />

要如何利用asp.net程式動態產生meta資訊呢,就是利用HtmlMeta這個類別,小弟寫一個範例介紹如何使用

asp.net(c#)

部分程式碼
        HtmlMeta meta = new HtmlMeta();
meta.Attributes.Add("http-equiv", "refresh");
meta.Content = "10; url=http://www.dotblogs.com.tw/puma/";
this.Header.Controls.Add(meta);

5秒轉址語法 (自動轉址)

Response.AddHeader("Refresh", "5; url=GridViewPage.aspx?page=" + page )

2009年7月6日 星期一

批次檔偵測硬碟容量後備份資料 (.Bat)

批次檔裡沒有偵測可用空間的指令
而且可用空間在每一次複製檔案進去之後也會變動
因此以下換成另一種做法
看看能不能達到你的目的

原理是利用每次執行DOS指令後回傳的狀態碼來判斷
如果ERRORLEVEL=0表示複製成功
如果ERRORLEVEL=1表示複製失敗(就試下一個磁碟)

批次檔如下供參考

@echo off   

:try1
copy xxx.zip z:\tools\xxx.zip
if errorlevel 1 goto try2
echo File was copied to [Z] successfully.
goto end

:try2
copy xxx.zip x:\tools\xxx.zip
if errorlevel 1 goto try3
echo File was copied to [X] successfully.
goto end

:try3
copy xxx.zip y:\tools\xxx.zip
if errorlevel 1 goto error
echo File was copied to [Y] successfully.
goto end

:error
echo Error happened.
goto end

:end
echo End.

在windows中利用xcopy來批次備份資料

自從硬碟便宜以後備分就顯得越來越重要了,誰知道哪天資料會隨著server一起去殉情,那時候就真的是欲哭無淚,所以來分享一下備份資料的小技巧。

還記得DOS那個年代可以下一些DOS指令嗎?沒錯,雖然現在可以用來備份的軟體很多,但是我還是偏愛指令啦 XD (一來免費,二來安心)


我最常用的方法就是使用這段指令:

xcopy 來源 目的 /s/d/y

然後把這段指令寫成一個bat的批次檔,接下來就可以將該批次檔掛在[控制台>排定的工作]中,然後讓他每天批次執行就可以了,一般我都喜歡排定在半夜2~5點之間進行,這樣才不會造成服務的影響,我想這大概是以前在網路公司呆久的壞毛病吧 XD

後面的參數涵義是:

/S 複製每個目錄及其包含的子目錄。
/D 複製發生變更的檔案。
/Y 所有覆蓋的詢問都回答 YES

完整的參數內容(從xcopy /?得知):

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\r\r
[/EXCLUDE:file1[+file2][+file3]...]
source 指定要複製的檔案。
destination 指定位置或者/以及新檔案的名稱。
/A 只複製設定成保存屬性的檔案,不要改變屬性的設定。
/M 只複製設定成保存屬性的檔案,並清除保存屬性。
/D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日期,
只複製那些來源檔案日期比目的檔案日期為新的檔案。
/EXCLUDE:file1[+file2][+file3]...
指定檔案清單字串。每個字串
應該在檔案中的不同行。如果有字串對應到要進行複製的檔案絕
對路徑的任何部分,這個檔案會被排除複製。例如,指定字串
\obj\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是.obj 的檔案複製。
/P 在建立每個目的檔案時顯示提示。
/S 複製每個目錄及其包含的子目錄,不複製空目錄。
/E 複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E相同,能夠用來修改 /T。
/V 驗證每個新檔案。
/W 在複製之前提示您按鍵繼續。
/C 如果錯誤發生時也繼續複製。
/I 如果目的不存在且複製一個以上的檔案的話,就假設指定的目的一定是目錄。
/Q 在複製時不要顯示檔名。
/F 在複製時顯示來源及目的檔案的全部檔名。
/L 顯示要複製的檔案。
/G 允許加密檔案複製到不支援加密的目的地。
/H 時複製隱藏檔和系統檔。
/R 覆蓋唯讀檔案。
/T 建立目錄結構,但不複製其中的檔案。不包括空目錄及子目錄。
/T /E 會包括空目錄及子目錄。
/U 只複製已經存在目的位置的檔案。
/K 複製檔案屬性。通常 Xcopy 會重設唯讀的屬性。
/N 用所產生的短檔名來進行複製。
/O 複製檔案所有權及 ACL 資訊。
/X 複製檔案審查設定 (包含 /O)。
/Y 不要提示您確認是否要覆蓋一個已經存在的檔案。
/-Y 示您確認是否要覆蓋一個已經存在的檔案。
/Z 在可重新開始的模式中複製網路檔案。
參數 /Y 可以在 COPYCMD 環境變數中預先設定。但可以在命令列中用 /-Y 參數
來覆蓋原有設定。

如何利用批次檔取得今日的日期或時間,甚至是部分的日期或時間

如何利用批次檔取得今日的日期或時間,甚至是部分的日期或時間

Windows 2000/XP/Server 2003 有兩個未公開的環境變數,可以顯示目前的日期與時間,分別是 %date% 與 %time%,透過這兩個環境變數,管理者可以自行撰寫批次檔(.bat 或 .cmd檔)取得所需部分的日期或時間內容。就讓我們透過下面的範例來看看這兩個變數的內容,並如何搭配 FOR /F ["options"] %variable IN ("string") DO command [command-parameters] 指令取得所需的部分日期或時間內容。

先看看日期變數的內容是什麼:

C:\>echo %date%

螢幕輸出:
2006/03/07 星期二 <----- Windows XP/Server 2003 的結果
星期二 2006/03/07 echo %time%

螢幕輸出:
14:21:57.47

接著我們使用 FOR 指令來把日期的分隔符號「/」以及空白(White Space)去掉,並將其結果顯示在螢幕上(下面的解說是以 Windows XP/Server 2003 為例,如果是 Windows 2000,則請自行舉一反三):

MyDate.bat 的檔案內容如下所示:
----程式開始---- 
REM 取得日期
FOR /F "tokens=1-4 delims=/ " %%a IN ("%date%") DO (
SET _MyDate=%%a%%b%%c%%d
)

REM 顯示去掉分隔符號後的結果
echo %_MyDate%
----程式結束----

看看執行的結果:
C:\>MyDate

螢幕輸出:
20060307星期二

想不到只是透過幾行程式碼就可以去掉日期變數的分隔符號了,相信有不少人看不懂那段程式碼,就讓我簡單地說明一下吧!

/F 是指定將後面 %date% 的環境變數當成檔案來處理,而處理的依據就是在「"tokens=1-4 delims=/ "」這邊。tokens如果按照字面翻譯的話,是權杖的意思,這樣翻不太直覺,在這邊翻成順序可能比較好一些。以這個例子來說,就是要取得順序 1 ~ 4 的字串,那程式怎麼知道這個順序的分法呢?透過 delims 這個引述的設定,程式就知道要怎麼去分析 %date% 環境變數的順序。在 delims 等號右邊的字元就是用來指定分割順序的依據。以這個例子來說,我們用「/」與「 」(空白,White Space)這兩個分隔符號來分割 %date% 的順序。因此原本 %date% 的內容是 2006/03/07 星期二,在程式來看就變成了:

順序 內  容
﹉﹉ ﹉﹉﹉﹉
1    2006
2      03
3     07
4   星期二

%%a 是說把順序 1 的結果指派給名稱為 %%a 的變數,因此順序 2 的變數名稱就會是 %%b,以此類推,最多可以有 52 個變數,原因如下:變數名稱有大小寫之分,所以 %%a 跟 %%A 不同,且僅能以一個英文字母來命名,所以 26(個字母)× 2(大寫跟小寫 2 種)=52(個)。

DO 後面的括號內容是用來指定所要執行的命令內容,以這個例子來說,就是指定一個名稱為 _MyDate 的變數,它的內容是由 %%a%%b%%c%%d 所構成的。

再來我們看看使用 FOR 指令去掉時間變數之分隔符號的結果:

MyTime.bat 的檔案內容如下所示:
----程式開始---- 
REM 取得時間
FOR /F "tokens=1-4 delims=:." %%a IN ("%time%") DO (
SET _MyTime=%%a%%b%%c%%d
)

REM 顯示去掉分隔符號後的結果
echo %_MyTime%
----程式結束----

看看執行的結果:
C:\>MyTime

螢幕輸出:
14243241