Domanda

Ho un paio di domande riguardanti VBScript e ASP Classic:

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

  2. Quali sono le migliori pratiche per quanto riguarda la separazione del modello dalla vista dal controller?

  3. Ci sono altre cose che dovrei sapere su VBScript o ASP?

Se non l'hai notato, sono nuovo nella codifica VBScript.Mi rendo conto che i numeri 2 e 3 sono una specie di gigantesche domande sul "buco nero" eccessivamente generali, quindi non pensare che mi aspetto di imparare tutto quello che c'è da sapere su queste due domande da qui.

È stato utile?

Soluzione

ADO è un modo eccellente per accedere a un database in 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

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 stai restituendo un campo MEMO in un recordset, assicurati di selezionare solo UN campo MEMO alla volta e assicurati che sia l'ULTIMA colonna nella tua query.Altrimenti incontrerai problemi.(Riferimento: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html )

Altri suggerimenti

Ho dovuto allontanarmi dal mio PC quando ho visto la prima risposta, e sono ancora angosciato dal fatto che sia stata approvata da così tante persone.È un esempio spaventoso del peggior tipo di codice ASP, il tipo che garantirebbe che il tuo sito sia iniettabile tramite SQL e, se continui a utilizzare questo codice in tutto il sito, possa essere violato entro un centimetro dalla sua vita.

Questo NON è il tipo di codice che dovresti dare a qualcuno che non conosce la codifica ASP poiché penserà che sia il modo professionale di scrivere codice nel linguaggio!

  1. Non rivelare MAI una stringa di connessione nel tuo codice poiché contiene il nome utente e la password del tuo database.Utilizzare invece un file UDL o almeno una costante che possa essere dichiarata altrove e utilizzata in tutto il sito.

  2. Non esistono più buone scuse per utilizzare SQL inline per qualsiasi operazione in un ambiente web.Utilizzare una procedura memorizzata: i vantaggi in termini di sicurezza non saranno mai sottolineati abbastanza.Se davvero non puoi farlo, considera i parametri in linea come una seconda migliore opzione...L'SQL in linea 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 sciatta.Usa "opzione esplicita" e dichiara le variabili nella parte superiore della funzione.Questa è la migliore pratica piuttosto che un vero WTF, ma è meglio iniziare come intendi andare avanti.

  4. Nessun suggerimento al database su che tipo di connessione sia: è di sola lettura o l'utente aggiornerà i record?La connessione può essere ottimizzata e il database può gestire il blocco in modo molto efficiente se viene detto in modo efficace 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 molte persone suggeriscano di passare a .NET: con buone pratiche di codifica è possibile scrivere un sito ASP facile da mantenere, scalabile e veloce, ma DEVI assicurarti di utilizzare tutti i metodi disponibili per renderlo il tuo codice è efficiente, DEVI mantenere buone pratiche di codifica e un po' di previdenza.Anche un buon editor sarà d'aiuto, la mia preferenza è per PrimalScript che trovo più utile per un programmatore ASP rispetto a qualsiasi degli ultimi prodotti MS che sembrano essere molto incentrati su .NET.

Inoltre, da dove viene un campo "MEMO"?È questa la nomenclatura di Access o forse MySQL?Chiedo perché tali campi sono stati chiamati campi TEXT o NTEXT in MS-SQL per un decennio.

Ricordati di programma in la lingua piuttosto che programmarla.Solo perché stai utilizzando un set di strumenti limitato non significa che devi programmare come se fossimo nel 1999.

Sono d'accordo con JasonS riguardo alle lezioni.È vero che non puoi fare cose come l'eredità, ma puoi 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à quanto segue:INC-APP-CommonIncludes.asp - Include elementi come le mie librerie generali (accesso al database, funzioni dei file, ecc.) e imposta la sicurezza e include qualsiasi file di configurazione (come stringhe di connessione, posizioni di directory, ecc.) e classi comuni (Utente, Autorizzazione , ecc) ed è incluso in ogni pagina.

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

Modules/ModuleName/Display/INC-DIS-Page.asp - Visualizza i dati impostati in page.vb.asp.

Riprendendo alcune idee e aggiungendone alcune mie:

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

2) Se lo desideri davvero, potresti scrivere il controller in VBScript e quindi accedervi nella pagina.Assomiglierebbe a un pattern Page Controller e non a un Front Controller che vedresti in ASP.NET MVC o MonoRail

3) Perché ti fai questo?La maggior parte degli strumenti necessari per svolgere questo tipo di lavoro non sono nemmeno più disponibili.

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

Esistono alcuni tentativi per creare framework di test per ASP:aspUnit è buono, ma non è più mantenuto.

Ho visto un esempio su come realizzarne uno qualche mese fa.L'esempio utilizza nUnit per chiamare funzioni sul sito Web per il test automatico.Penso di aver capito bene Qui (la mia linea è interrotta quindi non posso controllare)

Per quanto riguarda il numero 2, penso che tu abbia alcune opzioni...

1) È possibile utilizzare componenti COM sviluppati in VB6 o simili per separare parte della logica aziendale dall'interfaccia utente.

2) Puoi creare classi in VBScript.Non esiste il concetto di ereditarietà e nell'implementazione mancano altre funzionalità più avanzate, ma puoi incapsulare la logica in classi che aiutano a ridurre la spaziosità della tua app.Controlla questo: http://www.4guysfromrolla.com/webtech/092399-1.shtml

Sono d'accordo con @Cirieno che la risposta selezionata non sarebbe saggia da utilizzare nel codice di produzione, per tutti i motivi citati.Detto questo, se hai solo un po’ di esperienza, questa risposta è un buon punto di partenza per le nozioni di base.

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

Molto tempo indietro nel corso della giornata in cui VBScript/ASP era ancora ok ho lavorato in una società di servizi con un ambiente DB molto misto, giuravo da questo sito Web: http://www.connectionstrings.com/

@michealpryor ha capito bene

Sono rimasto bloccato a sviluppare su ASP e sento il tuo dolore.

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

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

2) Non ho visto nulla riguardante MVC specificatamente orientato verso ASP, ma sono decisamente interessato perché è qualcosa su cui faccio fatica a capire.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 il codice in file separati e quindi utilizzare le inclusioni lato server per riunirli tutti insieme.

3) Probabilmente provieni da un linguaggio che ha più funzionalità integrate.All'inizio potrebbe sembrare che manchino alcune cose, ma spesso è solo questione di scrivere molte più righe di codice di quelle a cui sei abituato.

Anche per l'accesso al database ho una serie di funzioni: GetSingleRecord, GetRecordset e UpdateDatabase che hanno una funzione simile a quella menzionata da Michael sopra

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top