2008-08-25 40 views
7

Tôi có một vài thắc mắc về VBScript và ASP Classic:VBScript/ASP cổ điển

  1. cách ưa thích để truy cập vào một cơ sở dữ liệu MS SQL Server trong VBScript/ASP là gì?

  2. Thực tiễn tốt nhất liên quan đến việc tách mô hình khỏi chế độ xem khỏi bộ điều khiển là gì?

  3. Bất kỳ điều nào khác tôi cần biết về VBScript hoặc ASP?

Nếu bạn chưa nhận thấy, tôi mới sử dụng mã VBScript. Tôi nhận ra con số 2 & 3 là loại câu hỏi "lỗ đen" khổng lồ quá chung chung, vì vậy đừng nghĩ rằng tôi hy vọng sẽ tìm hiểu mọi thứ có thể biết về hai câu hỏi đó từ đây.

+1

Bạn có cảm tình chân thành của tôi. –

Trả lời

20

ADO là một cách tuyệt vời để truy cập cơ sở dữ liệu trong VBScript/ASP cổ điển.

Dim db: Set db = Server.CreateObject("ADODB.Connection") 
db.Open "yourconnectionstring -> see connectionstrings.com" 
Dim rs: Set rs = db.Execute("SELECT firstName from Employees") 
While Not rs.EOF 
    Response.Write rs("firstName") 
    rs.MoveNext 
Wend 
rs.Close 

Thông tin thêm ở đây: http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

Một caveat là nếu bạn đang trở về một lĩnh vực MEMO trong một recordset, hãy chắc chắn bạn chỉ chọn MỘT lĩnh vực MEMO tại một thời điểm, và chắc chắn rằng nó là LAST trong truy vấn của bạn. Nếu không, bạn sẽ gặp rắc rối. (Tham khảo: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)

2

On số 2, tôi nghĩ rằng bạn có một vài lựa chọn ...

1) Bạn có thể sử dụng thành phần COM phát triển trong VB6 hoặc tương tự để tách một số logic kinh doanh của bạn từ bạn Giao diện người dùng.

2) Bạn có thể tạo các lớp bằng VBScript. Không có khái niệm về thừa kế và các tính năng nâng cao khác bị thiếu trong quá trình thực hiện, nhưng bạn có thể đóng gói logic trong các lớp giúp giảm mức độ chênh lệch của ứng dụng của bạn. Hãy kiểm tra này: http://www.4guysfromrolla.com/webtech/092399-1.shtml

3

Vang vọng một số ý tưởng và thêm một vài của riêng tôi:

1) Cách tốt nhất để truy cập vào cơ sở dữ liệu sẽ đến trừu tượng mà đi vào một thành phần COM của một số loại mà bạn truy cập từ VBScript.

2) Nếu bạn thực sự muốn bạn có thể viết bộ điều khiển trong VBScript và sau đó truy cập vào đó trong trang. Nó sẽ giống như một mẫu Page Controller và không phải là Front Controller mà bạn sẽ thấy trong ASP.NET MVC hoặc MonoRail

3) Tại sao bạn làm điều này cho chính mình? Hầu hết các công cụ cần thiết để thực hiện loại công việc này thậm chí không còn khả dụng nữa.

+1

Re 3: chắc chắn là vậy, và có rất nhiều tài nguyên cung cấp trợ giúp (như SO). Bạn có thể đã không sử dụng nó trong nhiều năm, nhưng nó không có nghĩa là những người khác vẫn không sử dụng nó, bất kể sự khôn ngoan khi làm như vậy. (Lợi ích của một số hợp đồng làm việc: trong và ngoài một cách nhanh chóng Thách thức của một số công việc hợp đồng: cần phải cung cấp một giải pháp trong khuôn khổ hiện có.) –

1

cách cách trở lại trong ngày khi VBScript/ASP vẫn ok Tôi làm việc trong một công ty tiện ích với một DB envrionment rất hỗn, tôi sử dụng để thề bởi trang web này: http://www.connectionstrings.com/

@michealpryor đã nhận nó đúng

1

Tôi đã bị mắc kẹt khi xây dựng trên ASP và tôi cảm thấy đau đớn của bạn.

1) Cách tốt nhất để truy vấn SQL Server là truy vấn được tham số hóa; điều này sẽ giúp ngăn chặn các cuộc tấn công SQL injection.

Tutorial (không blog của tôi):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) Tôi đã không nhìn thấy bất cứ điều gì liên quan đến MVC đặc biệt nhắm về phía ASP, nhưng tôi chắc chắn quan tâm vì nó là cái gì tôi đang có một thời gian khó khăn quấn quanh đầu tôi. Tôi thường cố gắng ít nhất chứa đựng những thứ có dạng xem và những thứ giống như bộ điều khiển trong các hàm riêng biệt. Tôi cho rằng bạn có thể viết mã trong các tệp riêng biệt và sau đó sử dụng phía máy chủ bao gồm để nối tất cả chúng lại với nhau.

3) Có thể bạn đang đến từ một ngôn ngữ có nhiều chức năng hơn. Lúc đầu, một số thứ có thể bị thiếu, nhưng thường chỉ là viết nhiều dòng mã hơn bạn đã từng.

+0

@ Fionnuala bị hỏng liên kết? gọi lại nó: http://web.archive.org/web/20071221011242/http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/ – frumbert

8

Nhớ chương trình thành ngôn ngữ thay vì chương trình trong đó. Chỉ vì bạn đang sử dụng bộ công cụ giới hạn không có nghĩa là bạn phải lập trình giống như năm 1999.

Tôi đồng ý với JasonS về các lớp học. Đó là sự thật bạn không thể làm những việc như thừa kế nhưng bạn có thể dễ dàng giả mạo nó

Class Dog 
    Private Parent 

    Private Sub Class_Initialize() 
     Set Parent = New Animal 
    End Sub 

    Public Function Walk() 
     Walk = Parent.Walk 
    End Function 

    Public Function Bark() 
     Response.Write("Woof! Woof!") 
    End Function 
End Class 

Trong các dự án của tôi một trang ASP sẽ có như sau: INC-APP-CommonIncludes.asp - Điều này bao gồm những thứ như thư viện chung của tôi (Truy cập cơ sở dữ liệu, chức năng tệp, vv) và thiết lập bảo mật và bao gồm bất kỳ tệp cấu hình nào (như chuỗi kết nối, vị trí thư mục, v.v) và các lớp phổ biến (Người dùng, Quyền, v.v) và được bao gồm trong mọi trang.

Modules/ModuleName/page.vb.asp - Loại giống như mã phía sau trang. Bao gồm các lớp BO, BLL và DAL cụ thể của trang và thiết lập dữ liệu cần thiết cho trang/nhận dữ liệu biểu mẫu đã gửi, v.v.

Mô-đun/Tên mô-đun/Hiển thị/INC-DIS-Page.asp - Hiển thị dữ liệu được thiết lập trong trang .vb.asp.

1

Ngoài ra để truy cập cơ sở dữ liệu tôi có một tập hợp các hàm - GetSingleRecord, GetRecordset và UpdateDatabase trong đó có chức năng tương tự như những gì Michael đề cập ở trên

16

tôi đã phải đi bộ ra khỏi máy tính của tôi khi tôi thấy câu trả lời đầu tiên, và tôi vẫn còn đau khổ vì nó đã được chấp nhận bởi rất nhiều người. Đó là một ví dụ kinh khủng về loại mã ASP tồi tệ nhất, loại sẽ đảm bảo trang web của bạn có thể tiêm SQL và, nếu bạn tiếp tục sử dụng mã này trên trang web, có thể tấn công trong vòng một inch của cuộc đời.

Đây KHÔNG phải là loại mã bạn nên cung cấp cho người mới sử dụng mã hóa ASP vì họ nghĩ đó là cách mã hóa chuyên nghiệp bằng ngôn ngữ!

  1. KHÔNG BAO GIỜ tiết lộ chuỗi kết nối trong mã của bạn vì nó chứa tên người dùng và mật khẩu vào cơ sở dữ liệu của bạn. Thay vào đó, hãy sử dụng tệp UDL hoặc ít nhất một hằng số có thể được khai báo ở nơi khác và được sử dụng trên trang web.

  2. Không còn bất kỳ lý do chính đáng nào để sử dụng SQL nội tuyến cho bất kỳ hoạt động nào trong môi trường web. Sử dụng một thủ tục được lưu trữ - các lợi ích bảo mật không thể được nhấn mạnh đủ. Nếu bạn thực sự không thể làm điều đó thì hãy nhìn vào các tham số nội tuyến như là một lựa chọn tốt thứ hai ... SQL nội tuyến sẽ rời khỏi trang web của bạn mở rộng để tiêm SQL, tiêm phần mềm độc hại và phần còn lại.

  3. Tuyên bố trễ các biến có thể dẫn đến mã hóa cẩu thả.Sử dụng "tùy chọn rõ ràng" và khai báo các biến ở trên cùng của hàm. Đây là thực hành tốt nhất chứ không phải là một WTF thực sự, nhưng tốt nhất là bắt đầu như bạn có nghĩa là để đi về.

  4. Không có gợi ý nào cho cơ sở dữ liệu về loại kết nối như thế nào - đó là chỉ đọc hay người dùng sẽ cập nhật hồ sơ? Kết nối có thể được tối ưu hóa và cơ sở dữ liệu có thể xử lý khóa rất hiệu quả nếu có hiệu quả nói với những gì mong đợi.

  5. Kết nối cơ sở dữ liệu không bị đóng sau khi sử dụng và đối tượng recordset không bị hủy hoàn toàn.

ASP vẫn là một ngôn ngữ mạnh mẽ, mặc dù nhiều người đề xuất chuyển sang .NET - với phương pháp mã hóa tốt trang ASP có thể dễ dàng duy trì, mở rộng và nhanh chóng, nhưng bạn phải đảm bảo bạn sử dụng mọi phương thức có sẵn để làm cho mã của bạn hiệu quả, bạn phải duy trì các thực hành mã hóa tốt và một chút suy đoán. Một trình soạn thảo tốt sẽ giúp quá, sở thích của tôi là cho PrimalScript mà tôi thấy hữu ích hơn cho một coder ASP hơn bất kỳ sản phẩm MS mới nhất mà dường như rất .NET-centric.

Ngoài ra, trường "MEMO" ở đâu? Danh mục Truy cập này có phải là MySQL hay không? Tôi yêu cầu các trường như vậy được gọi là các trường TEXT hoặc NTEXT trong MS-SQL trong một thập kỷ.

+0

1. putt kết nối bên trong tập lệnh không có nghĩa là chuỗi kết nối được hiển thị với khách truy cập. 2. sử dụng quy trình lưu trữ có nghĩa là mất tính linh hoạt. Cũng sử dụng sql nội tuyến, bạn có thể ngăn chặn tiêm sql. –

+2

1. Nếu máy chủ web của bạn bị tấn công hoặc truy cập bằng bất kỳ phương pháp nào thì cơ sở dữ liệu của bạn bây giờ cũng là một mục tiêu mở nhờ tên người dùng và mật khẩu ở ngay trong mã. –

+0

2. Tôi thực sự cũng tin rằng, khi tôi bắt đầu sử dụng ASP năm trước, nhưng nó là một cái nhìn rất ngây thơ và họ thực sự làm tăng mã và hiệu suất máy chủ (caching truy vấn = dữ liệu nhanh hơn), họ chính thức hóa quy trình phát triển (đảm bảo các kiểu dữ liệu chính xác, vv), và chúng thêm tính linh hoạt (dễ dàng thay đổi front-end hoặc có nhiều cách để truy cập dữ liệu). 3. Có, bạn có thể ngăn chặn SQL injection bằng cách sử dụng SQL nhưng tại sao lại thêm công việc cho chính mình khi có phương pháp thử nghiệm thời gian mà bất kỳ nhà phát triển nào sử dụng MS-SQL có thể sử dụng để lấy và trả về dữ liệu một cách hiệu quả và an toàn? –

2

Tôi đồng ý với @Cirieno, rằng câu trả lời được chọn sẽ không khôn ngoan để sử dụng trong mã sản xuất, vì tất cả những lý do anh ấy đề cập đến. Điều đó nói rằng, nếu bạn chỉ có một chút kinh nghiệm, câu trả lời này là một điểm khởi đầu tốt như những điều cơ bản.

Trong trải nghiệm ASP của mình, tôi thích viết lớp truy cập cơ sở dữ liệu của mình bằng VB, biên dịch thành một tệp DLL và tham khảo DLL qua VBScript. Khó khăn để gỡ lỗi trực tiếp thông qua ASP, nhưng nó là một cách tốt đẹp để đóng gói tất cả các mã truy cập dữ liệu ra khỏi mã ASP.

3

AX - Asp Xtreme Tiến hóa là một khung MVC cho ASP cổ điển

Có một số nỗ lực làm cho các khuôn khổ thử nghiệm cho asp: aspUnit là tốt, nhưng không còn được duy trì.

Tôi đã xem một ví dụ về cách tự làm một vài tháng trước. Ví dụ được sử dụng nUnit để gọi các chức năng đối với trang web để kiểm tra tự động. Tôi nghĩ rằng tôi đã nhận nó off here (đường dây của tôi bị bẻ cong vì vậy tôi không thể kiểm tra)

+0

Tuyệt vời. Nếu tôi vẫn làm công việc đó, tôi sẽ rất vui. :-) –

Các vấn đề liên quan