發表文章

目前顯示的是 6月, 2008的文章

ASP.NET 2.0 - Give me table border back!!

Someone asked me about why tables in his pages will have no border just after upgrading from .NET 1.1 to .NET 2.0 without any code changing. It was easy (relatively) to find the root cause, but it took me some time to find a simplest solution for him. Problem description : WebControls DataGrid & Table will render without border even it is set in gridline/border property in the code. Analysis: After comparing the output HTML of .NET 1.1 & .NET 2.0, both will have a HTML table with correct border settings in HTML attribute Style: style="border-color:#000000; " But there is another HTML attribute named bordercolor set with right color as value in .NET 1.1: bordercolor="#000000" Therefore, the root cause is that there is no such attribute "bordercolor" in element “Table” according to HTML 4.01 speciation. Attribute “bordercolor” is one of the IE-ONLY attributes (from IE 3+), but IE6 does not recoginize CSS border-color . Thus, .NET 2.0 renders corr

在Windows下自動備份Oracle資料

使用Oracle Client的公用程式,自動備份資料庫Schema的資料與procedures。 echo off SETLOCAL for /F "tokens=1-4 delims=/ " %%i in ('date /t') do ( set Year=%%i set Month=%%j set Day=%%k set DayOfWeek=%%l ) @echo Date:%DayOfWeek% set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 EXP LoginUserName / YourPassword @ OracleTNS file= OutputPrefix_ %Year%%Month%%Day% owner= ExportSchemaName ENDLOCAL

ASP.NET 2.0 手扎-GridView,書上沒告訴你的事

翻到今年三月正式建構ASP.NET 2.0的系統時,參考同事的「 ASP.NET 2.0學習手冊」發現:怎麼會有些不容易發現的小地方,造成耗費不少時間找問題癥結,最後都是一些小小的地方,或許是「貼心的設計/預設值」,但卻與我直覺有一些差異,因此解了問題後特別記下筆記,供自己未來參考。分享之。

Oracle清除閒置未關閉的連結

手上的一個的系統,因為使用Oracle Database Express Edition,加上Client端使用ASP.NET 1.1的System.Data.OracleClient,一直遭遇一個嚴重的偶發問題:使用者連結數超過系統的上限。 主要是發生在1.1版的OracleClient似乎會造成雖明確地關閉資料庫連結,但pooling的機制會讓Oracle誤判連結並未結束(閒置中),然後在部份功能使用AJAX後,更使得這問題顯得相當嚴重,甚至超過Oralc XE的上限(Enterprise版的上限比較高)。 不過,因為該系統屬於迷你系統,不需要也不可能使用Enterprise版(除非依附到別人的DB),而這段的程式也因為卡在有將系統升級到ASP.NET 2.0的打算,且主管不願意放資源(人力/工時)在這系統,所以改用暴力法去「減少問題發生的機率」。 主要概念是將閒置超過一定時間的連結session,直接在Oracle DB裡面把它砍掉(不過因為Oracle運作機制的緣故,實際上會是標示那些連結可以在下一次觸發清理機制的時候被刪除,但該機制並不沒有辦法強制立即執行)。 我在有限時間的作法是:作一個暫存的Table,建立一支Procedure 將應刪除的連結兜成執行刪除的SQL Commands 紀錄到該Table再讀出來執行,最後建立Job排程每隔依小段時間執行乙次。 這樣的作法有許多可以改進的地方,但礙於現實問題,也只能先這樣。Procedure如后: CREATE OR REPLACE PROCEDURE SYS.SP_CLEAR_SESSIONS AS CURSOR c1 IS SELECT KILL_STATEMENT FROM A_IDLE_SESSIONS; BEGIN DELETE FROM A_IDLE_SESSIONS; INSERT INTO A_IDLE_SESSIONS (KILL_STATEMENT) ( SELECT 'ALTER SYSTEM KILL SESSION '' ' substr(b.sid,1,5) ', ' substr(b.serial#,1,5) '''' AS KILL_STATEMENT FROM v$process a, v$se

C# 參數傳遞心得

C# 參數傳遞模式預設為「傳值」,也就是程序甲呼叫程序乙,並傳參數A給時,參數A是以一個副本的概念傳遞。 所以對於 實值型別 (如整數、字元、結構等)而言,A傳遞到乙的時候,是以一個跟A 有相同的內容實值 的另一個變數過去,也就是在甲中的A與乙的A是兩個具有相同內容、但儲存在記憶體不同位址的變數。 對於 參考型別 (如字串、類別)而言,是複製一個 指向位於heap中相同位址的變數 ,所以甲和乙各有一個變數(即A)指向一個相同的內容值(A所參考指向的物件)。 因此,假設在乙的過程中更改A的內容值,自乙離開後回到甲後,查看A的內容結果:對實值型別來說,A並沒有改變,也就是乙裡面做的改變並未影響甲的A;對參考型別來說,只要沒有更動A變數的參考(後述),則A是改變過的。 Ex: 整數參數 void 甲() { int A=1; // 查看A會等於 1 乙(A); // 查看A會等於2 } void 乙(int A) { A=A+1; } 物件參數 class C1 { string str1; public C1() { } public string Str1 { get{ return str1;} set { str1 = value; } } } void 甲() { C1 A = new C1(); A.Str1 = "ABC"; // 查看A的屬性St1會等於 ABC 乙(A); // 查看A的屬性St1會等於 ABCchanged } void 乙(C1 A) { C1.Str1 = C1.Str1 +"changed"; } 字串參數 void 甲() { string A="ABC"; // 查看A會等於 ABC 乙(A); // 查看A會等於ABC changed } void 乙(string A) { A=A+"changed"; } 至於更動參考型別的變數參考,是指在乙重新指派新的值給他,一般都是 透過 new 關鍵字 ,此時候在乙中對A嘗試修改都不會影響甲的A(如上述的字串參數)。 當甲的A有需要允許在乙中被更動時,可以透過「參數傳遞模式(parameter passing mode)關鍵字來將乙的A變更帶回甲中。 關鍵字有: " out ":限