2008/07/21

[SQL Server]WITH的遞迴應用-Split欄位

在網路上常看到一個問題,就是在一個欄位中存了類似 001, 002, 003 這樣的值.
一般存了這樣的值, 是想要轉成如下的資料表去跟其他的資料表做 JOIN 或是透過 WHERE 去濾資料.
FID MyField
1 001
1 002
1 003

2008/07/17

[Java]Netbeans6.1的Java檔中文出現亂碼

原本以為 Netbeans6.1 跟以前的版本一樣, 要到 Tools –> Options 找 Encoding 的設定, 然後改成 Big5 / UTF-8.
沒想到這一版只要在專案上按滑鼠右鍵 –> Properties –> Source –> 畫面下方就有一個 Encoding 可以選.
如果原本檔案是用 Big5 儲存( Notepad 看到的編碼是 ANSI), 就選 Big5 的 Encoding.
如果是 UTF-8 的編碼, 預設應該就是 UTF-8 , 不用另外改 (簡體中文版例外).
注意: 已經用 Netbeans 開啟的檔案, 要關掉再開一次才會正常顯示

2008/07/15

[Asp.Net]GridView的OnSorting參數永遠回傳SortDirection.Ascending

GridView 的 OnSorting 事件, 在 GridViewSortEventArgs 參數裡的 SortDirection 並不會因為使用者的點選而傳入 SortDirection.Ascending / SortDirection.Descending.
只能透過 ViewState / Session 等儲存機制來記憶上一次的排序方向.
例如在 OnSorting 的事件中使用 Session做狀態儲存:
if (Session["SortDirection"] == null) {
    //因預設是ASC,所以觸發此事件時, 應設定為DESC 
    Session["SortDirection"] = SortDirection.Descending;
}
else
{
    //ASC<-->DESC(對調) 
    Session["SortDirection"] = (((SortDirection)Session["SortDirection"]) ==
    SortDirection.Ascending) ? SortDirection.Descending : SortDirection.Ascending;
}
Session["SortExpression"] = e.SortExpression;

2008/07/14

[SQL Server 2005]遞迴查詢

在資料表中常見到一種 ID, Parent 的用法, 目的在於想使用遞迴的方式建立起樹狀的資料結構.
例如在程式中進行以下的作業:
while(true)
{
//SELECT ID, Parent, Name FROM Table1 WHERE Parent=@ID
}
透過迴圈, 一次次地到資料庫查詢這個 Node 相關的 Parent/Child 資料.

2008/06/13

[Asp.Net]解決在aspx檔中使用Response.Write輸出script的"常數中包含新行字元"錯誤

在aspx中加入如下的程式將造成執行期出現錯誤 (編譯器錯誤訊息: CS1010: 常數中包含新行字元):
Response.Write("<script type=\"text/javascript\">window.open('./CSV/"
+ strFileCSVName + "','_blank');</script>;");
查了一些網路討論, 發現問題出在</script>標籤.
只要修改成以下的程式, 就可以順利通過執行期的編譯.
Response.Write("<script type=\"text/javascript\">window.open('./CSV/"
 + strFileCSVName + "','_blank');<" + "/script" + ">");
重點在於將拆開, 使其不在同一個字串中.

2008/06/11

[ASP.Net]使用System.Web.Caching做網頁資料的Cache

因為Asp.Net中常被使用的 <sqldatasource>, 並無 Exception Handle 的機制.
所以就算用了 <sqldatasource> 的 Caching, 可能還是有某種程度的風險.
例如: 在 Caching 時間到的時候, 剛好資料庫無法連線.
概念上簡單地說, 就是當 Caching 出錯時, 能保留上一次所儲存的資料, 以讓網頁正常運作.

[ASP.Net]透過WebRequest抓取網路上的圖檔

以下程式是透過 WebRequest 的方式將網路中的圖檔存到本機:

string Url = "http://l.yimg.com/tw.yimg.com/i/tw/hp/spirit/yahoo_logo.gif";
string FullFileName = @"c:\tmp\yahoo_logo.gif";
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(Url);
//預設TimeOut是30秒
webReq.Timeout = 30000;
HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
//檢查儲存的檔案路徑,其目錄是否存在
if (!Directory.Exists(Path.GetDirectoryName(FullFileName)))
{
    //建立目錄
    Directory.CreateDirectory(Path.GetDirectoryName(FullFileName));
}
using (BinaryReader imgStream = new BinaryReader(webResp.GetResponseStream()))
{
    File.WriteAllBytes(FullFileName, imgStream.ReadBytes((int)webResp.ContentLength));
}

2008/04/25

[ASP.Net]AJAX的SlideShowExtender使用說明

ASP.Net 的 AJAX Control Toolkit 有一個用來做圖片輪播的 SlideShowExtender.
以下的範例除了說明該 Control 的運作, 亦說明如何依使用者所點選的分類, 來呈現該分類下的圖片.

2008/02/20

[SQL Server 2005]使用mdf檔附加資料庫(無ldf檔)

假如要將 A 電腦資料庫的 Test.mdf 檔(無 ldf 檔) 附加到 B 電腦的資料庫, 步驟如下:
  1. 在 B 電腦的 SQL Server 中新增一個資料庫, 例如: Test.
  2. 停止 B 電腦的 SQL Server 服務.
  3. 將 A 電腦資料庫的 Test.mdf 檔覆蓋掉 B 電腦 Test 資料庫的 Test.mdf 檔.
  4. 啟動 B 電腦的SQL Server服務.
  5. 在 B 電腦的 SQL Server Management Studio 中, 開啟一個 master 資料庫的查詢視窗.
  6. 設定 Test 資料庫狀態為 EMERGENCY: ALTER DATABASE Test SET EMERGENCY
  7. 設定 Test 資料庫模式為"單一使用者": sp_dboption 'Test', 'single user', 'true'
  8. 檢查指定資料庫中所有物件的配置、結構和邏輯完整性: DBCC CHECKDB (Test, REPAIR_ALLOW_DATA_LOSS)
  9. 還原 Test 資料庫模式: sp_dboption 'Test', 'single user', 'true'
  10. 設定 Test 資料庫狀態為 ONLINE: ALTER DATABASE Test SET ONLINE
因為沒有 ldf 檔, 所以可能會有部分交易的資料遺失.

2008/01/04

[ASP.Net] 在asp:Button加入Vaildation與javascript的confirm

  1. 設計 <asp:Button> 與一個需要驗證的 Control:
    <asp:Button ID="btnUpdate" 
    runat="server" 
    Text="更新" 
    CommandName="Update" 
    CausesValidation="false" 
    OnClientClick="return confirmUpdate();" 
    ValidationGroup="vgUpdate" />
    <asp:TextBox ID="txtUpdateName" runat="server" Text="HelloWorld"></asp:TextBox>
    <asp:RequiredFieldValidator ID="UpdateNameRequired" 
    runat="server" 
    ControlToValidate="txtUpdateName" 
    ToolTip="必須輸入名稱。" 
    ErrorMessage="必須輸入名稱。" 
    ValidationGroup="vgUpdate">*</asp:RequiredFieldValidator> 
    • 要將 CausesValidation 設定為 false, 以避免在 Client 端產生多餘的 validation.
    • 在 OnClientClick 中設定呼叫一個 javascript 的 function.
    • 對於要驗證的項目, 需給定一個 ValidationGroup 值 (ex: vgUpdate)