2008/08/05

MSDN教的分頁

之前就講過分頁的SQL怎樣下了,連結如下:
http://tomkentprogramming.blogspot.com/2006/07/sql.html#links

但是其實各人覺得這個真的有點浪費資源,每換頁一次就要再搬動整個資料庫。
於是上網找了一些資料。
發現,MYSQL竟然可以有LIMIT X,Y這玩意,
也就是將SQL COMMAND裡面第X列到第Y列直接抓出來。
就是這麼簡單。
範例:
select * from member
limit 10,20

就是這樣簡單也。
於是我心想,SQL SERVER是否也有,發現好像不行。

找了微軟的MSDN竟然找到一些奇怪的方式,在此也提供給大家。
像是rank這玩意,MSDN上的作法真的讓我匪夷所思,
MSDN的網址:
http://support.microsoft.com/kb/186133/zh-tw
MSDN的範例:【rank】
select rank=count(*) ,tb1.memNo , tb1.memName
from member as tb1, member as tb2
where tb1.memNo >= tb2.memNo group by tb1.memNo , tb1.memName order by rank
他這個作法真的是慢到誇張。建議不要使用,不過聽說SQL SERVER2000只能這樣,
如果是這樣,到不如用我之前那個寫法,會快很多,只是每次都要搬動整個資料庫。

於是我又發現了另一個好玩的東西:【row_number】
這個事SQL SERVER2005才有的東西,不過速度快很多。
讓我整個很愛...
MSDN的網址:
http://msdn.microsoft.com/zh-tw/library/ms186734.aspx
語法如下:
ROW_NUMBER ( ) OVER ( [ ] )
範例:
with memberIwant as
(
select row_number over (order by memNo) as rowNum, memNo, memName
form member
where memAge=20
)
select * from memberIwant
where rowNum between 20 and 30

2008/06/17

C# 換行 斷行

今天為了讓client可以直接另存XML,
弄了半天。
結果作後儲存的XML檔用筆記本檢視,
還是沒有換航,在該換行的地方出現了黑色矩形的圖案,
可是我明明就在字串插入了\n。
最後才知道,這跟VB的VBcrlf與VBcr一樣;
是有差別的。

所以插入\n來斷行,在其他編輯器應該是看得到換行,
只是在筆記本中,必須\r\n一起使用才會看見換行。

\n : New line

\r : Carriage return

2008/04/06

清除vs.net的"最近使用的專案"清單

最近開啟的檔案
HKCU\Software\Microsoft\VisualStudio\8.0\FileMRUList

最近開啟的專案
HKCU\Software\Microsoft\VisualStudio\8.0\ProjectMRUList


清除全部 "最近開啟的專案"
reg delete HKCU\Software\Microsoft\VisualStudio\8.0\ProjectMRUList /va /f

清除全部 "最近開啟的檔案"
reg delete HKCU\Software\Microsoft\VisualStudio\8.0\FileMRUList /va /f

2008/01/26

產生新GUID use VB.NET

System.Guid.NewGuid

產生新GUID use VB

VB Call API 寫法'
--------- API 宣告 ---------------------------
Private Declare Function WinCoCreateGuid Lib "OLE32.DLL" Alias "CoCreateGuid" (g As GUIDType) As Long '
-------- 自訂型態 --------
Private Type GUIDType
D1 As Long
D2 As Integer
D3 As Integer
D4(8) As Byte
End Type

' 取得新的 GUID
Public Function GetGUID() As String
Dim gt As GUIDType
Dim sBuf As String
Call WinCoCreateGuid(gt)
sBuf = PadZeros(Hex$(g.D1), 8, True) & _
PadZeros(Hex$(g.D2), 4, True) & _
PadZeros(Hex$(g.D3), 4, True) & _
PadZeros(Hex$(g.D4(0)), 2) & _
PadZeros(Hex$(g.D4(1)), 2) & _
PadZeros(Hex$(g.D4(2)), 2) & _
PadZeros(Hex$(g.D4(3)), 2) & _
PadZeros(Hex$(g.D4(4)), 2) & _
PadZeros(Hex$(g.D4(5)), 2) & _
PadZeros(Hex$(g.D4(6)), 2) & _
PadZeros(Hex$(g.D4(7)), 2)
GetGUID = sBuf
End Function

' 補 0
Public Function PadZeros(ByVal sBit As String, _
ByVal iStrLen As Integer, _
Optional bHyphen As Boolean) As String
If iStrLen > Len(sBit) Then
sBit = Right(String((iStrLen - Len(sBit)), "0") & sBit, iStrLen)
End If
If bHyphen Then sBit = sBit & "-"
PadZeros = sBit
End Function

2007/12/19

類別加上說明 in Visual Studio 2005

寫程式的時候
常常會寫類別,再把自己寫好的類別編譯;
但是編譯後就看不到原始碼,
使用的人很難從類別名稱知道這個類別怎樣使用,
所以VS2005有這個貼心的小功能。

只要在自己寫好的類別上面加上一些TAG,
當有人include這些類別時,就會看到這類別的說明了。
在C#下,類別的上面打上///
在VB下,類別的上面打上'''
VS就會自己出現一些TAG給你選,讓你去說明這個類別了。

<summary></summary>:類別的主要說明
<remarks></remarks>:輔助說明
<param></param>:傳入的參數說明
<returns></returns>:回傳值的說明
<value></value>:屬性的說明

2007/11/23

開新視窗 for JavaScript

方法一

vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

IE和FIREFOX皆可
EX:
window.showModalDialog("openwin.html","Arguments","dialogHeight: 200px; dialogWidth: 200px; dialogTop: 10px; dialogLeft: 10px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;");

方法二
oNewWindow = window.open( [sURL] [, sName] [, sFeatures] [, bReplace])
IE可
EX:
window.open('openwin.html','newWin',

'modal=yes,width=200,height=200,resizable=no,scrollbars=no');



子視窗叫母視窗函數
方法一
window.dialogArguments.Function(value);
方法二
window.opener.Function(value);

2007/10/28

IE的參數

昨天為了做光碟的autorun
要寫一隻自動開啟IE而且全螢幕的小程式

在此介紹一下IE的參數
iexplore.exe -k URL =>表示全螢幕開啟這個網頁
-k 全螢幕
-nohome 不能修改首頁
-e 顯示工作管理員