2009-04-20 4 views

Trả lời

13

Sử dụng đối tượng adodb.command.

with createobject("adodb.command") 
    .activeConnection = application("connectionstring") 
    .commandText = "select * from sometable where id=?" 
    set rs = .execute(,array(123)) 
end with 

Tôi cũng khuyên bạn nên sử dụng đối tượng truy cập db tùy chỉnh thay vì sử dụng trực tiếp adodb. Điều này cho phép bạn xây dựng một api đẹp hơn, cải thiện khả năng thử nghiệm và thêm các móc để gỡ lỗi/ghi nhật ký/lược tả. Thứ hai, bạn có thể thêm các giao dịch có phạm vi yêu cầu với các lỗi trên của rollback tiềm ẩn khi sử dụng sự kiện class_terminiate. đối tượng truy cập Oure db cung cấp các truy vấn api sau

call db.execute("update some_table set column=? where id=?", array(value, id)) 
set rs = db.fetch_rs("select * from some_table where id=?", array(id)) 
count = db.fetch_scalar("select count(*) from some_table where column > ?", array(value)) 
+0

Làm cách nào để xử lý lỗi trong trường hợp này? – Geshan

+0

vbscript rất thanh lịch và tối thiểu - Tôi thích nó! –

+0

Điều này không hoạt động nếu cột là số và giá trị là rỗng. Có cách nào để làm việc này mà không cần sử dụng ADODB.Command.CreateParameter? –

11

Tôi giả sử bạn đang đề cập đến truy vấn SQL được tham số hóa. Nếu đây là trường hợp, sau đó mã VBScript sẽ giống như thế này:

Set adoCon = Server.CreateObject("ADODB.Connection") 
adoCon.Open "connectionstring" 
SET cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = adoCon 
cmd.CommandType= adCmdStoredProc 
cmd.CommandText = "GetCustomerByFirstName" 

cmd.Parameters.Append cmd.CreateParameter("@FirstName",adVarchar,adParamInput,50,"John")  

Set Rec = cmd.Execute() 
While NOT Rec.EOF 
    'code to iterate through the recordset 
    Rec.MoveNext 
End While 

UPDATE: Bạn cần phải bao gồm các tập tin ADOVBS.inc cho hằng số để được công nhận.

Đây là liên kết: ADOVBS.inc

+0

tôi có cần bao gồm một số tệp để ASP nhận ra các hằng số adVarchar và adParamInput không? –

+1

Có. Đây là một liên kết đến tập tin đó http://www.asp101.com/articles/john/adovbs/adovbs.inc.txt –

+0

suggesstion này rất hữu ích trong kịch bản thủ tục lưu trữ – Thanigainathan

8

Một lựa chọn khác để bao gồm adovbs.inc là thêm một tham chiếu đến thư viện kiểu sau gần phía trên cùng của ASP của bạn. Giả sử điều này có hiệu suất tốt hơn bao gồm:

<!--METADATA TYPE="TypeLib" NAME="ADODB Type Library" UUID="00000205-0000-0010-8000-00AA006D2EA4" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" VERSION="2.5" --> 

Here là danh sách một số thư viện kiểu.

+1

+1 đề xuất tuyệt vời! – Abel