2008-08-25 10 views
7

Ho un paio di domande riguardanti VBScript e ASP Classic:VBScript/ASP Classic

  1. Qual è il modo migliore per accedere a un database MS SQL Server in VBScript/ASP?

  2. Quali sono le migliori pratiche in merito alla separazione del modello dalla vista dal controller?

  3. Qualsiasi altra cosa dovrei sapere su VBScript o ASP?

Se non l'hai notato, sono nuovo alla codifica VBScript. Mi rendo conto che i numeri 2 & 3 sono una specie di domande "black hole" giganti che sono eccessivamente generiche, quindi non pensate che mi aspetto di imparare tutto quello che c'è da sapere su queste due domande da qui.

+1

Hai le mie sincere condoglianze. –

risposta

20

ADO è un modo eccellente per accedere a un database in ASP VBScript/Classic.

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 

Maggiori informazioni qui: http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

Un avvertimento è che se si restituisce un campo Memo in un set di record, assicuratevi di selezionare solo un campo MEMO alla volta, e assicurarsi che è l'ultimo colonna nella tua query. Altrimenti incontrerai dei problemi. (Riferimento: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)

2

Il numero 2, penso che tu abbia alcune opzioni ...

1) È possibile utilizzare i componenti COM sviluppati in VB6 o simili per separare alcuni la logica di business dalla tua UI.

2) È possibile creare classi in VBScript. Non esiste un concetto di ereditarietà e mancano altre funzionalità avanzate dall'implementazione, ma è possibile incapsulare la logica in classi che aiutano a ridurre la spiehtti-ness della tua app. Dai un'occhiata a questo: http://www.4guysfromrolla.com/webtech/092399-1.shtml

3

Riprendendo alcune idee e l'aggiunta di un paio di mio:

1) Il modo migliore per accedere al database sarebbe a astratto che via in un componente COM di qualche tipo a cui si accede da VBScript.

2) Se si desidera veramente, è possibile scrivere il controller in VBScript e quindi accedervi nella pagina. Sarebbe assomigliare ad un modello di pagina di controllo e non un front controller che si vedrebbe in ASP.NET MVC o monorotaia

3) Perché stai facendo questo a te stesso? La maggior parte degli strumenti necessari per fare questo tipo di lavoro non è ancora disponibile.

+1

Re 3: sicuro che sia, e ci sono un sacco di risorse che forniscono aiuto (come SO). Potresti non averlo usato da anni, ma ciò non significa che altre persone non lo stiano ancora usando, indipendentemente dalla saggezza di farlo. (Vantaggio di alcuni lavori a contratto: dentro e fuori rapidamente. Sfida di alcuni lavori a contratto: necessità di fornire una soluzione all'interno del quadro esistente.) –

1

modo nel lontano il giorno in cui VBScript/ASP erano ancora ok ho lavorato in una società di servizi con un envrionment molto mista DB, ho usato a giurare per questo sito: http://www.connectionstrings.com/

@michealpryor capito bene

1

Sono stato bloccato a costruire su ASP, e sento il tuo dolore.

1) Il modo migliore per eseguire query su SQL Server è con query parametrizzate; questo aiuterà a prevenire attacchi di SQL injection.

Tutorial (non il mio blog):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) non ho visto nulla per quanto riguarda MVC specificamente orientata verso ASP, ma sono sicuramente interessati perché è qualcosa che sto avendo un momento difficile avvolgendo la mia testa. In genere cerco di contenere almeno cose che sono simili a viste e cose che sono simili a controller in funzioni separate. Suppongo che potresti scrivere codice in file separati e poi usare server side include per unirli tutti insieme.

3) Probabilmente stai provenendo da una lingua con più funzionalità incorporate. All'inizio, alcune cose potrebbero sembrare mancanti, ma spesso si tratta solo di scrivere molte più righe di codice di quelle che stai abituato a.

+0

@Fionnuala collegamento interrotto? 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

8

Ricordarsi di programmare in la lingua piuttosto che il programma in esso. Solo perché stai utilizzando un set di strumenti limitato non significa che devi programmare come se fosse il 1999.

Sono d'accordo con JasonS sulle classi. E 'vero che non si può fare cose come l'ereditarietà, ma si può facilmente fingere

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 

Nei miei progetti una pagina ASP avrà il seguente: INC-APP-CommonIncludes.asp - questo include cose come le mie librerie generali (Accesso al database, funzioni dei file, ecc.) E imposta sicurezza e include qualsiasi file di configurazione (come stringhe di connessione, posizioni delle directory, ecc.) E classi comuni (Utente, Permessi, ecc.) Ed è incluso in ogni pagina.

Moduli/ModuleName/page.vb.asp - Un po 'come un codice dietro pagina. Include le classi BO, BLL e DAL specifiche della pagina e imposta i dati richiesti per la pagina/riceve i dati del modulo inviato, ecc.

Moduli/Nome modulo/Visualizza/INC-DIS-Pagina.asp - Visualizza i dati impostati nella pagina .vb.asp.

1

Anche per l'accesso al database Ho una serie di funzioni - GetSingleRecord, GetRecordset e UpdateDatabase che ha funzione simile a quello che Michael menziona sopra

16

ho dovuto camminare lontano dal mio PC quando ho visto la prima risposta, e AM ancora angosciato dal fatto che sia stato approvato da così tante persone. È un esempio sconvolgente del peggior tipo di codice ASP, il tipo che assicurerebbe che il tuo sito sia SQL-injectable e, se continui a utilizzare questo codice attraverso il sito, hackerabile entro un pollice della sua vita.

Questo NON è il tipo di codice che dovresti dare a qualcuno di nuovo nella codifica ASP poiché penseranno che sia il modo professionale di codifica nella lingua!

  1. Non rivelare MAI una stringa di connessione nel codice in quanto contiene nome utente e password nel database. Utilizzare invece un file UDL o, per lo meno, una costante che può essere dichiarata altrove e utilizzata attraverso il sito.

  2. Non esiste più una buona scusa per l'utilizzo di SQL in linea per qualsiasi operazione in un ambiente Web. Utilizzare una stored procedure: i vantaggi in termini di sicurezza non possono essere sottolineati abbastanza. Se davvero non puoi farlo, allora considera i parametri in linea come una seconda opzione migliore ... Inline SQL lascerà il tuo sito completamente aperto all'iniezione SQL, all'iniezione di malware e al resto.

  3. La dichiarazione tardiva delle variabili può portare a una codifica errata.Utilizzare "opzione esplicita" e dichiarare le variabili nella parte superiore della funzione. Questa è la migliore pratica piuttosto che un vero WTF, ma è meglio iniziare come intendi per andare avanti.

  4. Nessun accenno al database per quanto riguarda il tipo di connessione: è solo per la lettura o l'utente aggiorna i record? La connessione può essere ottimizzata e il database può gestire il blocco in modo molto efficiente se viene effettivamente detto cosa aspettarsi.

  5. La connessione al database non viene chiusa dopo l'uso e l'oggetto recordset non viene completamente distrutto.

ASP è ancora un linguaggio forte, nonostante le molte persone che suggeriscono di trasferirsi a .NET - con le buone pratiche di codifica un sito ASP può essere scritto che è facile da mantenere, scalabile e veloce, ma devi fare in modo usi tutti i metodi disponibili per rendere efficiente il tuo codice, DEVI mantenere buone pratiche di codifica e un po 'di accortezza. Un buon editor sarà d'aiuto, la mia preferenza è per PrimalScript che trovo più utile per un codificatore ASP rispetto a tutti gli ultimi prodotti MS che sembrano essere molto incentrati su .NET.

Inoltre, da dove proviene un campo "MEMO"? È questa nomenclatura di accesso, o forse MySQL? Chiedo come tali campi siano stati chiamati campi TEXT o NTEXT in MS-SQL per un decennio.

+0

1. putt una connessione all'interno dello script non significa che la stringa di connessione è esposta al visitatore. 2. L'uso della procedura di memorizzazione significa perdere flessibilità. Usando inline sql puoi anche prevenire l'iniezione sql. –

+2

1. Se il tuo server web è hackerato o accessibile con qualsiasi metodo, il tuo database ora è anche un obiettivo aperto grazie al nome utente e alla password che si trovano proprio nel codice. –

+0

2. Anch'io ci credevo molto, quando ho iniziato a utilizzare ASP anni fa, ma è una visione molto ingenua e aumentano davvero l'efficienza del codice e del server (memorizzazione nella cache di query = dati più veloci), formalizzano i processi di sviluppo (garantendo corretti tipi di dati, ecc.) e aggiungono flessibilità (più facile cambiare il front-end o avere più modi di accedere ai dati). 3. Sì, è possibile impedire l'SQL injection utilizzando SQL in linea, ma perché aggiungere lavoro per se stessi quando esiste un metodo collaudato che può essere utilizzato da qualsiasi sviluppatore che utilizza MS-SQL per ottenere e restituire i dati in modo efficiente e sicuro? –

2

Sono d'accordo con @Cirieno, che la risposta selezionata non sarebbe saggia da utilizzare nel codice di produzione, per tutte le ragioni che menziona. Detto questo, se hai solo una piccola esperienza, questa risposta è un buon punto di partenza per le basi.

Nella mia esperienza ASP, ho preferito scrivere il mio livello di accesso al database usando VB, compilando una DLL e facendo riferimento alla DLL tramite VBScript. Difficile eseguire il debug direttamente tramite ASP, ma è stato un buon modo per incapsulare tutto il codice di accesso ai dati lontano dal codice ASP.

3

AX - Asp Xtreme Evolution è un framework MVC per ASP classico

Ci sono alcuni tentativi di fare quadri di prova per asp: aspUnit è buono, ma non sono mantenute.

Ho visto un esempio su come realizzare il proprio alcuni mesi indietro. L'esempio utilizzato nUnit per chiamare le funzioni contro il sito Web per il test automatico. Penso di averlo tolto here (la mia linea è chiusa in modo che non possa controllare)

+0

Fantastico. Se lavorassi ancora a quel lavoro, sarei felice. :-) –