一、資料庫連線字串
1. ASP 連接 Access (Jet OLEDB)
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\Db.mdb;User ID=Admin;Password=;
2. ASP 連接 SQL Server (SQLOLEDB / SQLNCLI)
Provider=SQLOLEDB;Data Source=ServerName;Initial Catalog=DbName;User ID=sa;Password=Pwd;
Provider=SQLOLEDB;Data Source=ServerName;Initial Catalog=DbName;Integrated Security=SSPI;
二、建立與開啟記錄集
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sqlStr, conn, 3, 2 ' 3=adOpenStatic, 2=adLockOptimistic
常用 CursorType/LockType 組合:
| CursorType | 值 | LockType | 值 | 說明 |
| adOpenForwardOnly | 0 | adLockReadOnly | 1 | 唯讀、單向、效能最佳(預設) |
| adOpenStatic | 3 | adLockOptimistic | 3 | 可移動、樂觀鎖定、支援 RecordCount |
| adOpenKeyset | 1 | adLockOptimistic | 3 | 可見他人刪除、不可見新增 |
| adOpenDynamic | 2 | adLockOptimistic | 3 | 完全動態、支援書籤、成本最高 |
三、常用 SQL 指令速查
1. 資料篩選 (SELECT)
-- 精確比對
SELECT * FROM Table WHERE Col = 'Value' ORDER BY Col [DESC];
-- 模糊比對
SELECT * FROM Table WHERE Col LIKE '%Value%' ORDER BY Col [DESC];
-- Top N
SELECT TOP 10 * FROM Table WHERE Col = 'Value' ORDER BY Col [DESC];
-- IN 清單
SELECT * FROM Table WHERE Col IN ('V1','V2','V3');
-- 範圍
SELECT * FROM Table WHERE Col BETWEEN Val1 AND Val2;
2. 更新資料 (UPDATE)
UPDATE Table SET Col = 'Val' WHERE Condition;
UPDATE Table SET Col1='V1', Col2='V2' WHERE Condition;
3. 刪除資料 (DELETE)
DELETE FROM Table WHERE Condition;
DELETE FROM Table; -- 刪除所有列(慎用!建議配合 TRUNCATE TABLE)
4. 新增資料 (INSERT)
INSERT INTO Table (Col1, Col2, Col3) VALUES (Val1, Val2, Val3);
INSERT INTO TargetTable SELECT * FROM SourceTable; -- 複製資料
5. 彙總統計函數
AVG(Col) -- 平均
COUNT(*|Col) -- 筆數 / 非 NULL 筆數
MAX(Col) -- 最大值
MIN(Col) -- 最小值
SUM(Col) -- 總和
-- 使用範例
SELECT SUM(Amount) AS TotalAmt FROM Orders WHERE OrderDate > '2023-01-01';
Set rs = conn.Execute(sql)
total = rs("TotalAmt")
6. 資料表 DDL
CREATE TABLE TableName (
Col1 VARCHAR(50),
Col2 DATETIME DEFAULT GETDATE()
);
DROP TABLE TableName; -- 永久刪除
四、Recordset 核心方法與屬性速查表
| 方法/屬性 | 說明 |
| MoveNext / MovePrevious | 游標下移/上移一列 |
| MoveFirst / MoveLast | 移至第一/最後一列 |
| AbsolutePosition = N | 移至第 N 列 (1-based) |
| AbsolutePage = N | 移至第 N 頁第一列 |
| PageSize = N | 設定每頁筆數 |
| PageCount | 回傳總頁數 (需 PageSize) |
| RecordCount | 回傳總筆數 (需 Static/Keyset 游標) |
| BOF / EOF | 游標是否超出首端/末端 (True/False) |
| Delete | 刪除當前列 (游標不自動移動) |
| AddNew | 新增列至末端 |
| Update | 寫入變更 |
五、Recordset.Open 完整語法
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
Source: SQL 字串、資料表名、預存程序、Command 物件
ActiveConnection: 連線字串或 Connection 物件
Options: adCmdText(1), adCmdTable(2), adCmdStoredProc(4), adCmdUnknown(8)
六、實務提醒
- 參數化查詢:務必使用
Command.Parameters 防止 SQL Injection,勿拼接字串。
- 資源釋放:
rs.Close: Set rs = Nothing; conn.Close: Set conn = Nothing。
- 游標選擇:唯讀報表用
adOpenForwardOnly, adLockReadOnly;需分頁/書籤用 adOpenStatic, adLockOptimistic。
- RecordCount 陷阱:ForwardOnly 游標永遠回傳 -1,需用
SELECT COUNT(*) 獨立查詢。