2008-08-25 178 views
7

我有幾個關於VBScript和ASP經典問題:的VBScript/ASP經典

  1. 什麼是在VBScript/ASP訪問的MS SQL Server數據庫的首選方法是什麼?

  2. 關於將模型與控制器視圖分離的最佳實踐是什麼?

  3. 任何其他的事情我應該知道關於VBScript或ASP?

如果您還沒有注意到,我是VBScript編碼新手。我意識到數字是一種過於籠統的巨大的「黑洞」問題,所以不要以爲我期望從這裏學到所有關於這兩個問題的知識。

+1

你有我衷心的同情心。 – 2009-07-09 12:27:28

回答

20

ADO是訪問VBScript/Classic ASP中數據庫的絕佳方法。

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 

此處瞭解詳情:http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

一個需要注意的是,如果你是在一個記錄返回一個備註字段,要確保你一次只能選擇一個備忘錄領域,並確保它是最後一個列中查詢。否則,你會遇到問題。 (參考:http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html

2

在2號,我覺得你有幾個選項...

1)您可以使用VB6開發COM組件等,以你的一些業務邏輯分離開你UI。

2)您可以在VBScript中創建類。沒有繼承的概念,並且實現中沒有其他更高級的特性,但是您可以將邏輯封裝在類中,這有助於減少應用程序的分散性(spagehttiness)。看看這個:http://www.4guysfromrolla.com/webtech/092399-1.shtml

3

呼應一些想法,並加入了一些我自己的:

1)最好的方式來訪問數據庫將抽象的是遠成某種你從VBScript訪問COM組件。 2)如果你真的想要你可以在VBScript中編寫控制器,然後訪問頁面中的控制器。它將類似於Page Controller模式,而不是在ASP.NET MVC或MonoRail中會看到的Front Controller。3)爲什麼要對自己做這件事?大多數做這種工作所需的工具甚至不再可用。

+1

回覆3:確實如此,並且有很多資源可以提供幫助(如SO)。您可能沒有多年使用過它,但這並不意味着其他人不會繼續使用它,無論這樣做的智慧如何。 (一些合同工作的好處:快速進出,一些合同工作的挑戰:需要在現有框架內提供解決方案。) – 2009-10-01 18:17:49

1

方式歸途中一天的VBScript/ASP仍然確定 我曾在一家公用事業公司有非常複雜的數據庫環境不受,我使用本網站發誓:http://www.connectionstrings.com/

@michealpryor這樣做是正確

1

我一直堅持建立在ASP上,我感到你的痛苦。

1)查詢SQL Server的最佳方式是使用參數化查詢;這將有助於防止SQL注入攻擊。

教程(我的博客):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2)我還沒有看到關於MVC實現ASP專門針對什麼,但我很有興趣,因爲這是我有一個艱難的時間的東西包裹着我的頭。我通常試圖至少包含類似於視圖的東西,以及在不同功能中類似控制器的東西。我想你可能會在不同的文件中編寫代碼,然後使用服務器端包含將它們全部連接在一起。

3)你可能來自一種內置了更多功能的語言。起初,有些東西看起來可能會丟失,但它通常只是編寫比你更多的代碼行習慣於。

+0

@Fionnuala斷開連接? wayback it:http://web.archive.org/web/20071221011242/http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/ – frumbert 2014-11-06 00:58:23

8

記住要程序變成這個語言而不是程序吧。僅僅因爲你使用的是有限的工具集並不意味着你必須像1999年一樣編程。

我同意JasonS關於類。這是真的,你不能做的事情一樣的繼承,但是你可以很容易僞造它

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 

在我的項目的ASP頁將具備以下條件: INC-APP-CommonIncludes.asp - 這包括的東西像我一般的圖書館(數據庫訪問,文件功能等),並設置安全性,幷包含任何配置文件(如連接字符串,目錄位置等)和常用類(用戶,權限等),幷包含在每個頁面中。

Modules/ModuleName/page.vb.asp - 有點像頁面背後的代碼。包括頁面特定BO,BLL和DAL類別,並設置頁面/接收提交表格數據所需的數據等。

Modules/ModuleName/Display/INC-DIS-Page.asp - 顯示頁面中設置的數據.vb.asp。

1

也爲數據庫訪問我有一組功能 - GetSingleRecord,GetRecordset和UpdateDatabase具有類似的功能,以邁克爾·提到上述

16

我有,當我看到的第一個答案,從我的PC走開,和我仍然很痛心,它已經得到了很多人的贊同。這是最糟糕的ASP代碼的一個令人震驚的例子,這種代碼可以確保您的網站具有SQL注入功能,並且如果您繼續在整個網站中使用此代碼,就可以在其生命的一英寸範圍內進行修復。

這不是你應該給新來ASP編碼的那種代碼,因爲他們會認爲這是用語言編碼的專業方式!

  1. 不要在代碼中顯示連接字符串,因爲它包含數據庫的用戶名和密碼。改爲使用UDL文件,或者至少使用一個可在其他地方聲明並在整個網站中使用的常量。

  2. 對於在Web環境中的任何操作使用內聯SQL已經不再有任何好的藉口。使用存儲過程 - 不能強調安全優勢。如果你真的無法做到這一點,那麼查看內聯參數作爲次優選項......內聯SQL將使您的站點對SQL注入,惡意軟件注入以及其他方面開放。

  3. 變量的遲聲明可能導致草率編碼。使用「顯式選項」並在函數頂部聲明變量。這是最好的做法,而不是一個真正的跆拳道,但最好從你的意思開始。

  4. 沒有向數據庫提示這是什麼類型的連接 - 僅用於讀取還是用戶更新記錄?如果有效地告訴連接可以期望什麼,連接可以被優化並且數據庫可以非常有效地處理鎖定。

  5. 數據庫連接在使用後未關閉,並且記錄集對象未完全銷燬。

ASP仍然是一個強大的語言,儘管很多人建議遷移到.NET - 具有良好的編碼習慣的ASP網站可以寫,易於維護,可擴展性和快速的,但你必須確保您使用可用的每種方法來使代碼高效,您必須保持良好的編碼習慣和一點預謀。一個好的編輯器也會有所幫助,我的偏好是PrimalScript,我發現它比ASP似乎非常以.NET爲中心的最新MS產品更適合ASP編碼器。

此外,「MEMO」字段來自哪裏?這是Access命名法,還是MySQL?我問,這樣的字段在MS-SQL中被稱爲TEXT或NTEXT字段十年。

+0

1.在腳本內部建立連接並不意味着連接字符串暴露給訪問者。 2.使用存儲過程意味着失去靈活性。也可以使用內聯sql來防止sql注入。 – 2010-11-06 09:13:59

+2

1.如果您的網絡服務器被任何方法攻擊或訪問,那麼您的數據庫現在也是一個開放的目標,這要歸功於代碼中的用戶名和密碼。 – 2010-11-12 11:38:58

2

我同意@Cirieno,因爲他提到的所有原因,所選答案在生產代碼中並不明智。這就是說,如果你只有一點經驗,這個答案是基礎知識的一個很好的起點。

在我的ASP體驗中,我更願意使用VB編寫我的數據庫訪問層,編譯成DLL並通過VBScript引用DLL。很難直接通過ASP進行調試,但它是將所有數據訪問代碼封裝在ASP代碼之外的好方法。

3

AX - 天冬氨酸的Xtreme進化是對於ASP MVC框架經典

有一些嘗試,在做測試框架的asp: aspUnit是好的,但不再保留。

我在幾個月前看到了關於如何製作你自己的一個樣本。 該示例使用nUnit針對網站調用函數進行自動測試。 我認爲我得到了它here(我的線是borked所以我不能檢查)