Pergunta

Tenho algumas perguntas sobre VBScript e ASP Classic:

  1. Qual é a maneira preferida de acessar um banco de dados MS SQL Server em VBScript/ASP?

  2. Quais são as melhores práticas em relação à separação do modelo da visão do controlador?

  3. Alguma outra coisa que eu deveria saber sobre VBScript ou ASP?

Se você não percebeu, sou novo em codificação VBScript.Sei que os números 2 e 3 são questões gigantes de "buraco negro" que são excessivamente gerais, então não pense que estou esperando aprender tudo o que há para saber sobre essas duas questões a partir daqui.

Foi útil?

Solução

ADO é uma excelente forma de acessar um banco de dados em 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

Mais informações aqui: http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

Uma ressalva é que, se você estiver retornando um campo MEMO em um conjunto de registros, selecione apenas UM campo MEMO por vez e certifique-se de que seja a ÚLTIMA coluna da sua consulta.Caso contrário, você terá problemas.(Referência: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html )

Outras dicas

Tive que me afastar do meu PC quando vi a primeira resposta e ainda estou angustiado por ela ter sido aprovada por tantas pessoas.É um exemplo terrível do pior tipo de código ASP, o tipo que garantiria que seu site fosse injetável em SQL e, se você continuar usando esse código em todo o site, poderia ser hackeado dentro de um centímetro de sua vida útil.

Este NÃO é o tipo de código que você deveria fornecer a alguém novo na codificação ASP, pois eles pensarão que é a forma profissional de codificar na linguagem!

  1. NUNCA revele uma string de conexão em seu código, pois ela contém o nome de usuário e a senha do seu banco de dados.Use um arquivo UDL ou pelo menos uma constante que possa ser declarada em outro lugar e usada em todo o site.

  2. Não há mais nenhuma boa desculpa para usar SQL embutido para qualquer operação em um ambiente web.Use um procedimento armazenado – os benefícios de segurança nunca podem ser suficientemente enfatizados.Se você realmente não pode fazer isso, considere os parâmetros in-line como a segunda melhor opção...O SQL inline deixará seu site totalmente aberto à injeção de SQL, injeção de malware e muito mais.

  3. A declaração tardia de variáveis ​​pode levar a uma codificação desleixada.Use "opção explícita" e declare variáveis ​​no topo da função.Esta é uma prática recomendada, e não um WTF real, mas é melhor começar como você pretende continuar.

  4. Não há dicas para o banco de dados sobre que tipo de conexão é essa - é apenas para leitura ou o usuário atualizará os registros?A conexão pode ser otimizada e o banco de dados pode lidar com o bloqueio de maneira muito eficiente se for informado com eficácia sobre o que esperar.

  5. A conexão com o banco de dados não é fechada após o uso e o objeto do conjunto de registros não é totalmente destruído.

ASP ainda é uma linguagem forte, apesar de muitas pessoas sugerirem migrar para .NET - com boas práticas de codificação, um site ASP pode ser escrito de forma fácil de manter, escalável e rápido, mas você PRECISA ter certeza de usar todos os métodos disponíveis para fazer seu código é eficiente, você PRECISA manter boas práticas de codificação e um pouco de premeditação.Um bom editor também ajudará, minha preferência é pelo PrimalScript, que considero mais útil para um codificador ASP do que qualquer um dos produtos MS mais recentes, que parecem ser muito centrados no .NET.

Além disso, de onde vem o campo "MEMO"?Esta é a nomenclatura do Access ou talvez MySQL?Pergunto se esses campos são chamados de campos TEXT ou NTEXT no MS-SQL há uma década.

Lembrar de programa em a linguagem em vez de programar nela.Só porque você está usando um conjunto limitado de ferramentas não significa que você precisa programar como se estivéssemos em 1999.

Concordo com JasonS sobre as aulas.É verdade que você não pode fazer coisas como herança, mas pode facilmente fingir

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

Nos meus projetos, uma página ASP terá o seguinte:INC-APP-CommonIncludes.asp - Inclui coisas como minhas bibliotecas gerais (acesso ao banco de dados, funções de arquivo, etc.) e configura a segurança e inclui quaisquer arquivos de configuração (como cadeias de conexão, locais de diretório, etc.) e classes comuns (Usuário, Permissão , etc) e está incluído em todas as páginas.

Modules/ModuleName/page.vb.asp - Como uma espécie de código por trás da página.Inclui classes BO, BLL e DAL específicas da página e configura os dados necessários para a página/recebe dados do formulário enviado, etc.

Modules/ModuleName/Display/INC-DIS-Page.asp - Exibe os dados configurados em page.vb.asp.

Ecoando algumas ideias e adicionando algumas de minha autoria:

1) A melhor maneira de acessar o banco de dados seria abstraí-lo em algum tipo de componente COM que você acessa no VBScript.

2) Se você realmente quisesse, poderia escrever o controlador em VBScript e acessá-lo na página.Seria semelhante a um padrão Page Controller e não a um Front Controller que você veria no ASP.NET MVC ou MonoRail

3) Por que você está fazendo isso consigo mesmo?A maior parte das ferramentas necessárias para fazer esse tipo de trabalho nem está mais disponível.

AX - Asp Xtreme Evolution é um framework MVC para ASP clássico

Existem algumas tentativas de criar frameworks de teste para asp:aspUnit é bom, mas não é mais mantido.

Eu vi um exemplo de como fazer o seu próprio alguns meses atrás.O exemplo usou nUnit para chamar funções no site para teste automático.Eu acho que consegui aqui (minha linha está bloqueada, então não posso verificar)

No número 2, acho que você tem algumas opções...

1) Você pode usar componentes COM desenvolvidos em VB6 ou similares para separar parte da sua lógica de negócios da sua UI.

2) Você pode criar classes em VBScript.Não há conceito de herança e outros recursos mais avançados estão faltando na implementação, mas você pode encapsular a lógica em classes que ajudam a reduzir a dispersão do seu aplicativo.Veja isso: http://www.4guysfromrolla.com/webtech/092399-1.shtml

Concordo com @Cirieno, que a resposta selecionada não seria sensata para uso em código de produção, por todos os motivos que ele menciona.Dito isto, se você tiver um pouco de experiência, esta resposta é um bom ponto de partida para o básico.

Na minha experiência em ASP, preferi escrever minha camada de acesso ao banco de dados usando VB, compilando em uma DLL e referenciando a DLL via VBScript.Difícil depurar diretamente através do ASP, mas foi uma ótima maneira de encapsular todo o código de acesso a dados do código ASP.

Muito bem no dia em que o VBScript/ASP ainda estava bem, eu trabalhei em uma empresa de serviços públicos com um Envrionment de DB muito misto, eu costumava jurar por este site: http://www.connectionstrings.com/

@michealpryor acertou

Fiquei preso na construção do ASP e sinto sua dor.

1) A melhor maneira de consultar o SQL Server é com consultas parametrizadas;isso ajudará a prevenir ataques de injeção de SQL.

Tutorial (não é meu blog):
http://www.nomadpete.com/2007/03/23/classic-asp- Which-is-still-alive-and-parametised-queries/

2) Não vi nada sobre MVC voltado especificamente para ASP, mas estou definitivamente interessado porque é algo que estou tendo dificuldade em entender.Geralmente tento conter pelo menos coisas semelhantes a visualizações e coisas semelhantes a controladores em funções separadas.Suponho que você poderia escrever código em arquivos separados e, em seguida, usar inclusões do lado do servidor para juntá-los novamente.

3) Você provavelmente vem de uma linguagem que possui mais funcionalidades integradas.A princípio, algumas coisas podem parecer estar faltando, mas muitas vezes é apenas uma questão de escrever muito mais linhas de código do que você está acostumado.

Também para acesso ao banco de dados eu tenho um conjunto de funções - GetSingleRecord, GetRecordset e UpdateDatabase que tem função semelhante ao que Michael menciona acima

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top