2010年11月17日 星期三

[Oracle]處理中文亂碼 -- NLS_LANG設定

開發連結oracle資料庫不可不注意中文的處理問題

首先必須確認DB Server的編碼設定

select userenv('language') from dual;
取得結果為TRADITIONAL_CHINESE.TAIWAN.ZHT16BIG5

接下來就是設定client端的NLS_LANG,只要與DB Server相同,中文顯示就會正確了

1. 開始 -> 執行 -> regedit
2. 找出 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
3. NLS_LANG改為TRADITIONAL_CHINESE.TAIWAN.ZHT16BIG5

這樣由這台client連到TRADITIONAL_CHINESE.TAIWAN.ZHT16BIG5 的DB Server中文顯示就會是正確的。

另一個議題,單一client要連結的DB Server有多種NLS_LANG,擔任Web Server的client常有這種狀況!!!

以ASP.NET為例:

public void ReadMyData(string connectionString)
{
    //設定Oracle NLS_LANG,在connect db前設定環境變數
    System.Environment.SetEnvironmentVariable("NLS_LANG", "AMERICAN_AMERICA.ZHT32EUC");
    string queryString = "SELECT OrderID, CustomerID FROM Orders";
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbCommand command = new OleDbCommand(queryString, connection);
        connection.Open();
        OleDbDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
        }
        // always call Close when done reading.
        reader.Close();
    }
}


其關鍵就是
System.Environment.SetEnvironmentVariable("NLS_LANG","AMERICAN_AMERICA.ZHT32EUC");
 
針對單一Web Site設定連線到DB NLS_LANG,就可以一勞永逸的解決中文問題,不管程式被Deploy到哪裡,
都不受那台Web Server的NLS_Lang影響。

2010年10月11日 星期一

[ASP.NET]Visual Studio建立N-Tier的Solution

於Visual Studio實現N-Tier,目前將程式分為三層:
1.UI (Web Form)
2.BLL (Bussiness Logic Layer)
3.DAL (Data Access Layer)

要建立起這樣的架構,首先必須建立一個空白專案,我們可用此專案開啟我們的N-Tier全部檔案來檢視。
1.建立空白專案




























 2.建立Client檔案夾,加入Web Application 的Project











3.建立General檔案夾,建立BLL與DAL的Project








4.檢視建立完畢的Solution






















5.各Layer間要加入Reference,這樣就可以把整個Solution關係都拉起來了~
首先,BLL將DAL加入Reference,
接著就是在Web Application加入BLL與DAL。










6.檢視整個Solution加入Reference後的結果










































這樣就大致的把3-Tier切出來了,
透過如此的切法,
DAL主要只負責用來連結資料庫,對資料庫做資料處理。
BLL則是扮演DAL與UI之前的橋樑,對於取出資料庫取出的資料作邏輯處理,回覆資料給UI。
UI則是單純的扮演呼叫BLL與呈現資料,不做邏輯處理與判斷。

2010年6月7日 星期一

[Oracle]箱型圖(BoxPlot)統計值運算

繪製箱型圖顯示一組數據的分散情況,而若從資料庫中的Raw Data,來繪製箱型圖,則需結算出六個必要數值:最大值、最小值、中位數、平均值、Q1下四分位數、Q3下四分位數

以Oracle範例資料庫中的employees資料表為例,計算每個部門的箱型圖數值:


select department_id,
       max(salary) Upper_whisker,
       min(salary) Lower_whisker,
       round(avg(salary),3) Average,
       PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY salary ASC) Q1,
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary ASC) Median,
       PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY salary ASC) Q3
  from employees t
 group by department_id

2010年5月27日 星期四

[ASP.NET]左右ListBox選單(3) -- 非同步PostBack Trigger

 承[ASP.NET] 左右ListBox選單(1) -- 按鈕Trigger[ASP.NET] 左右ListBox選單(2) -- Javascript Trigger的主題,有介紹以雙擊(double click)去觸發PostBack,然而以javascript送出則會有整頁往後送的效果,網頁會閃爍。
本文介紹將Control放入Update Panel來避免頁面閃爍的現象,另以非同步的javascript去做PostBack,同時可達到雙擊的效果與簡短了程式碼的撰寫。

首先,承上文的Code:
  1. Control放入UpdatePanel中
  2. ListBox的Control內加入Double Click事件的Function
  3. __doPostBack('ButtonRight','')  為非同步送出觸發ButtonRight 的事件

2010年5月26日 星期三

[ASP.NET]左右ListBox選單(2) -- Javascript Trigger

[ASP.NET] 左右ListBox選單(1) -- 按鈕Trigger 的主題,選取Value後按下中間的四個按鈕觸發PostBack,本文將雙擊(double click)的動作加入觸發PostBack的行列,讓選取的時候更加方便與直覺。

首先,承上文的Code:
  1. <head></head>之間加入javascript,雙擊時將送出form
  2. ListBox的Control內加入Double Click事件的Function,並加入一個hidden欄位
  3. CS頁面內加入接收雙擊ListBox時操作

2010年5月25日 星期二

[ASP.NET]左右ListBox選單(1) -- 按鈕Trigger

以ListBox實做左方ListBox為可選擇之項目,右方ListBox為已選擇之項目,中間放置四個按鈕,分別為向右鈕/全選向右鈕/向左鈕/全選向左鈕。


Blogger加上表格--放入HTML TABLE

在Blogger寫程式分享的文章,若有插入表格的需求,
表格編寫需要用HTML的方式,如:<table><tr><td>XXX</td></tr>

寫入的原始碼需用CSS的方式包住,才可避免有多餘的空白出現。


[Table 原始碼]