VBScript / ASP Classic - PullRequest
       43

VBScript / ASP Classic

7 голосов
/ 25 августа 2008

У меня есть пара вопросов относительно VBScript и ASP Classic:

  1. Каков предпочтительный способ доступа к базе данных MS SQL Server в VBScript / ASP?

  2. Каковы наилучшие практики в отношении отделения модели от вида от контроллера?

  3. Любые другие вещи, которые я должен знать о VBScript или ASP?

Если вы не заметили, я новичок в кодировании VBScript. Я понимаю, что числа 2 и 3 - это гигантские вопросы о «черной дыре», которые носят слишком общий характер, поэтому не думаю, что я собираюсь узнать все, что можно узнать об этих двух вопросах, отсюда.

Ответы [ 10 ]

20 голосов
/ 25 августа 2008

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/

Одно замечание: если вы возвращаете поле MEMO в наборе записей, убедитесь, что вы выбираете только ОДНО поле MEMO за раз, и убедитесь, что это столбец LAST в вашем запросе. В противном случае вы столкнетесь с проблемами. (Ссылка: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)

17 голосов
/ 18 сентября 2008

Мне пришлось уйти от компьютера, когда я увидел первый ответ, и все еще огорчен тем, что он был одобрен многими людьми. Это ужасающий пример самого худшего вида ASP-кода, такого, который гарантирует, что ваш сайт будет SQL-инъекционным, и, если вы продолжите использовать этот код по всему сайту, его можно будет взломать в течение дюйма его жизни.

Это НЕ тот код, который вы должны давать кому-то, кто плохо знаком с ASP-кодированием, поскольку он будет думать, что это профессиональный способ кодирования на языке!

  1. НИКОГДА не раскрывайте строку подключения в вашем коде, поскольку она содержит имя пользователя и пароль для вашей базы данных. Вместо этого используйте файл UDL или, по крайней мере, константу, которую можно объявить в другом месте и использовать на сайте.

  2. Больше нет оправдания использованию встроенного SQL для какой-либо операции в веб-среде. Используйте хранимую процедуру - преимущества безопасности не могут быть подчеркнуты достаточно. Если вы действительно не можете этого сделать, тогда рассматривайте встроенные параметры как второй лучший вариант ... Встроенный SQL сделает ваш сайт широко открытым для внедрения SQL, внедрения вредоносных программ и всего остального.

  3. Позднее объявление переменных может привести к небрежному кодированию. Используйте «option visible» и объявите переменные в верхней части функции. Это лучшая практика, а не настоящий WTF, но лучше начинать так, как вы хотите.

  4. Нет никаких намеков на базу данных относительно того, что это за тип соединения - он только для чтения или пользователь будет обновлять записи? Соединение может быть оптимизировано, и база данных может очень эффективно обрабатывать блокировку, если эффективно сказать, чего ожидать.

  5. Соединение с базой данных не закрывается после использования, и объект набора записей не полностью уничтожен.

ASP по-прежнему сильный язык, несмотря на то, что многие люди предлагают перейти на .NET - с хорошими практиками кодирования можно написать сайт ASP, который прост в обслуживании, масштабируем и быстр, но вы ДОЛЖНЫ убедиться, что используете каждый метод чтобы сделать ваш код эффективным, вы ДОЛЖНЫ поддерживать хорошие методы кодирования и немного обдумать. Хороший редактор тоже поможет, я предпочитаю PrimalScript, который я считаю более полезным для ASP-кодировщика, чем любой из последних продуктов MS, который кажется очень .NET-ориентированным.

Кроме того, откуда берется поле "MEMO"? Это номенклатура Access или, может быть, MySQL? Я спрашиваю, как такие поля назывались полями TEXT или NTEXT в MS-SQL в течение десятилетия.

8 голосов
/ 18 сентября 2008

Не забывайте программировать на язык, а не программировать на нем. То, что вы используете ограниченный набор инструментов, не означает, что вам нужно программировать так, как будто это 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 - отображает данные, настроенные в page.vb.asp.

3 голосов
/ 09 июля 2009

AX - Asp Xtreme Evolution - это инфраструктура MVC для ASP classic

Есть несколько попыток создания тестовых сред для asp: aspUnit - это хорошо, но больше не поддерживается.

Несколько месяцев назад я видел пример того, как сделать свой собственный. В этом примере nUnit использовался для вызова функций для веб-сайта для автоматического тестирования. Я думаю, что у меня это получилось здесь (моя линия разбита, поэтому я не могу проверить)

3 голосов
/ 25 августа 2008

Повторяю некоторые идеи и добавляю несколько моих:

1) Лучший способ получить доступ к базе данных - это абстрагировать ее в COM-компонент, к которому вы обращаетесь из VBScript.

2) Если вы действительно этого хотите, вы можете написать контроллер на VBScript, а затем получить доступ к нему на странице. Он будет напоминать шаблон Page Controller, а не Front Controller, который вы видели бы в ASP.NET MVC или MonoRail

3) Почему ты делаешь это с собой? Большая часть инструментов, необходимых для такой работы, больше не доступна.

2 голосов
/ 09 октября 2008

Я согласен с @Cirieno, что выбранный ответ не будет разумно использовать в рабочем коде по всем причинам, которые он упоминает. Тем не менее, если у вас есть небольшой опыт, этот ответ является хорошей отправной точкой в ​​отношении основ.

В моем опыте ASP я предпочел написать свой уровень доступа к базе данных, используя VB, компилировать в DLL и ссылаться на DLL через VBScript. Трудно отлаживать напрямую через ASP, но это был хороший способ инкапсулировать весь код доступа к данным вне кода ASP.

2 голосов
/ 25 августа 2008

На номер 2, я думаю, у вас есть несколько вариантов ...

1) Вы можете использовать COM-компоненты, разработанные в VB6 или тому подобное, чтобы отделить часть своей бизнес-логики от вашего интерфейса.

2) Вы можете создавать классы в VBScript. Понятие наследования отсутствует, и в реализации отсутствуют другие более продвинутые функции, но вы можете инкапсулировать логику в классы, которые помогают уменьшить распространенность вашего приложения. Проверьте это: http://www.4guysfromrolla.com/webtech/092399-1.shtml

1 голос
/ 18 сентября 2008

Также для доступа к базе данных у меня есть набор функций - GetSingleRecord, GetRecordset и UpdateDatabase, функция которых аналогична той, что Майкл упоминает выше

1 голос
/ 13 сентября 2008

Я застрял на 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) Вы, вероятно, пришли из языка, который имеет больше встроенной функциональности. Сначала некоторые вещи могут показаться отсутствующими, но зачастую это просто вопрос написания гораздо большего количества строк кода, чем вы использовали к.

1 голос
/ 25 августа 2008

в тот день, когда VBScript / ASP еще были в порядке Я работал в коммунальной компании с очень смешанным окружением БД, я клялся этим сайтом: http://www.connectionstrings.com/

@ michealpryor понял все правильно

...