VBScript / ASP Classic

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

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

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

  3. Что еще мне нужно знать о VBScript или ASP?

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

Примите мои искренние соболезнования.

C. Ross 09.07.2009 16:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
1
5 770
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Ответ принят как подходящий

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 за раз, и убедитесь, что это ПОСЛЕДНИЙ столбец в вашем запросе. Иначе у вас возникнут проблемы. (Ссылка: http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)

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

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

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

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

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

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

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

По поводу 3: конечно, и есть много ресурсов, которые предоставляют помощь (например, SO). Возможно, вы не использовали его годами, но это не значит, что другие люди все еще не используют его, независимо от того, насколько они разумны. (Выгода от работы по контракту: вход и выход быстро. Проблема с работой по контракту: необходимость предоставить решение в рамках существующей структуры.)

Dave DuPlantis 01.10.2009 22:17

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

@michealpryor понял это правильно

Я застрял в разработке ASP, и я чувствую вашу боль.

1) Лучший способ сделать запрос к SQL Server - использовать параметризованные запросы; это поможет предотвратить атаки с использованием SQL-инъекций.

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

2) Я не видел ничего, что касалось MVC, специально ориентированного на ASP, но мне определенно интересно, потому что это то, что мне трудно осмыслить. Обычно я стараюсь, по крайней мере, содержать вещи, которые похожи на просмотр, и вещи, похожие на контроллер, в отдельные функции. Я полагаю, вы могли бы написать код в отдельных файлах, а затем использовать серверные включения, чтобы объединить их все вместе.

3) Вы, вероятно, пришли из языка, который имеет больше встроенных функций. Сначала может показаться, что некоторых вещей не хватает, но часто это просто вопрос написания гораздо большего количества строк кода, чем вы привыкли.

@Fionnuala неработающая ссылка? Обратный путь: web.archive.org/web/20071221011242/http://www.nomadpete.com/‌…

frumbert 06.11.2014 03:58

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

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

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

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

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

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

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

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

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

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

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

1. Помещение соединения внутри скрипта не означает, что строка соединения видна посетителю. 2. Использование процедуры хранения означает потерю гибкости. Также, используя встроенный sql, вы можете предотвратить внедрение sql.

Marco Staffoli 06.11.2010 12:13

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

Cirieno 12.11.2010 14:38

2. Когда я начал использовать ASP несколько лет назад, я действительно верил в это, но это очень наивная точка зрения, и они действительно повышают эффективность кода и сервера (кэширование запросов = более быстрые данные), они формализуют процессы разработки (обеспечивая правильность типы данных и т. д.), и они добавляют гибкости (легче изменить интерфейс или иметь несколько способов доступа к данным). 3. Да, вы можете предотвратить SQL-инъекцию с помощью встроенного SQL, но зачем добавлять работу для себя, когда есть проверенный временем метод, который любой разработчик, использующий MS-SQL, может использовать для эффективного и безопасного получения и возврата данных?

Cirieno 12.11.2010 14:44

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

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

AX - Asp Xtreme Evolution - это среда MVC для классического ASP.

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

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

Другие вопросы по теме