1.若使用DataSourceID搭配 SqlDataSource(設定精靈)來作的話,可以完全不用寫程式,就能做到 GridView的「編輯」、「更新」、「刪除」,可以省去許多撰寫程式碼的時間。但缺點是 SqlDataSource這種精靈,能作的東西有限!
2.若GridView使用DataSource來繫結資料,那很抱歉,「編輯」、「更新」、「刪除」這些程式碼得自行Coding!!!但優點是不會被 SqlDataSource給綁住,發展空間大。
3.使用GridView透過DataSourceID,千萬別再下GridView.DataBind()指令,避免重覆繫結資料造成錯誤。原因是使用 DataSourceID,系統會自動產生.DataBind()的效果。
4.不可同時使用DataSourceID與DataSource,會出現Exception!!!
資料來源:閒談 DataSource 與 DataSourceID
2013年10月24日 星期四
2013年10月13日 星期日
[VB] On Error GoTo ...、On Error Resume Next、On Error GoTo 0的比較
在VB程式撰寫裡,為了避免程式被不可預期的錯誤所中斷,可以使用下列三種指令來解決:
如果不使用 On Error 陳述式,任何執行階段之錯誤都是嚴重的,結果會導致顯示錯誤訊息,並且中止執行。
On error goto line 與 On error resume next 這兩述敘使用的有效範圍為Sub或Function,例如在Sub或Function的開頭加上,在Sub或Function結束功能就失效,或者使用on error goto 0來取消功能。
若發生的錯誤都是可忽略的,建議使用On error resume next,如此程式就不會因為不可預期的錯誤所中斷了。
如果能知道錯誤的原因,每個錯誤都有個代號,在Err物件中,可由Err.Number來取得。如果錯誤原因有很多種,可以用On error goto line攔截錯誤,搭配Select Case分別提示使用者該如何處理,甚至可以轉回主畫面。架構如下:
On error goto line
...
...
line:
select case err.Number
case 錯誤編號
...
case 錯誤編號
...
case else
...
end select
這樣程式就不會中斷了。
參考資料:
1.On Error 陳述式
2.On Error的用法
陳述式 |
描述
|
On Error GoTo line |
啟動錯誤處理常式。且此常式的開始位置由 line 引數指定。此line引數是必要的而且是任何行標籤或是行號。如果發生一個執行階段錯誤,程式控制會跳到 line 的位置,使錯誤處理程式開始動作。指定的 line 必須是和 On Error 陳述式在同一個程序裏。 否則,會發生編譯階段錯誤。
|
On Error Resume Next |
表示當一個執行階段錯誤產生時,程式控制立刻到發生錯誤陳述式接下去的陳述式,而繼續執行下去。當使用一個物件的時候,請使用這個陳述式,而不要使用 On Error GoTo。
|
On Error GoTo 0 | 停止現在程序裡任何已啟動的錯誤處理程式。 |
如果不使用 On Error 陳述式,任何執行階段之錯誤都是嚴重的,結果會導致顯示錯誤訊息,並且中止執行。
On error goto line 與 On error resume next 這兩述敘使用的有效範圍為Sub或Function,例如在Sub或Function的開頭加上,在Sub或Function結束功能就失效,或者使用on error goto 0來取消功能。
若發生的錯誤都是可忽略的,建議使用On error resume next,如此程式就不會因為不可預期的錯誤所中斷了。
如果能知道錯誤的原因,每個錯誤都有個代號,在Err物件中,可由Err.Number來取得。如果錯誤原因有很多種,可以用On error goto line攔截錯誤,搭配Select Case分別提示使用者該如何處理,甚至可以轉回主畫面。架構如下:
On error goto line
...
...
line:
select case err.Number
case 錯誤編號
...
case 錯誤編號
...
case else
...
end select
這樣程式就不會中斷了。
參考資料:
1.On Error 陳述式
2.On Error的用法
2013年10月10日 星期四
[SQL] case和decode的用法(行轉列)
假設現有一張Table叫Score如下:
現在目標要將Score這張Table轉換如下圖:
這時SQL指令有兩種下法:
(SQL與Oracle都可用)Case 版:
Select 姓名,
sum((case when 科目='數學' then 成績 else 0 end)) 數學,
sum((case when 科目='國文' then 成績 else 0 end)) 國文
from Score
group by 姓名
Decode 版:(只有Oracle可用)
Select 姓名,
sum(decode(科目,'數學',成績,0)) 數學,
sum(decode(科目,'國文',成績,0)) 國文
from Score
group by 姓名
參考資料:sql與oracle中有關case和decode的用法(行轉列)及比較
姓名 | 科目 | 成績 |
阿毛 | 數學 | 100 |
阿毛 | 國文 | 89 |
阿花 | 數學 | 90 |
阿花 | 國文 | 70 |
現在目標要將Score這張Table轉換如下圖:
姓名 | 數學 | 國文 |
阿毛 | 100 | 89 |
阿花 | 90 | 70 |
這時SQL指令有兩種下法:
(SQL與Oracle都可用)Case 版:
Select 姓名,
sum((case when 科目='數學' then 成績 else 0 end)) 數學,
sum((case when 科目='國文' then 成績 else 0 end)) 國文
from Score
group by 姓名
Decode 版:(只有Oracle可用)
Select 姓名,
sum(decode(科目,'數學',成績,0)) 數學,
sum(decode(科目,'國文',成績,0)) 國文
from Score
group by 姓名
參考資料:sql與oracle中有關case和decode的用法(行轉列)及比較
訂閱:
文章 (Atom)