Классический VBScript/ASP
-
09-06-2019 - |
Вопрос
У меня есть пара вопросов относительно VBScript и ASP Classic:
Каков предпочтительный способ доступа к базе данных MS SQL Server в VBScript/ASP?
Каковы лучшие практики отделения модели от представления от контроллера?
Что еще мне следует знать о VBScript или ASP?
Если вы не заметили, я новичок в кодировании VBScript.Я понимаю, что номера 2 и 3 — это своего рода гигантские вопросы «черной дыры», которые носят слишком общий характер, поэтому не думайте, что я ожидаю отсюда узнать все, что нужно знать об этих двух вопросах.
Решение
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 )
Другие советы
Мне пришлось отойти от компьютера, когда я увидел первый ответ, и я до сих пор расстроен тем, что его одобрило так много людей.Это ужасающий пример наихудшего вида кода ASP, который гарантирует, что ваш сайт будет доступен для SQL-инъекций и, если вы продолжите использовать этот код на всем сайте, его можно будет взломать в течение дюйма его жизни.
Это НЕ тот код, который следует давать новичкам в программировании ASP, поскольку они подумают, что это профессиональный способ кодирования на языке!
НИКОГДА не раскрывайте строку подключения в своем коде, поскольку она содержит имя пользователя и пароль для вашей базы данных.Вместо этого используйте файл UDL или, по крайней мере, константу, которую можно объявить в другом месте и использовать на сайте.
Больше нет оправданий использованию встроенного SQL для любых операций в веб-среде.Используйте хранимую процедуру — преимущества безопасности невозможно переоценить.Если вы действительно не можете этого сделать, рассмотрите встроенные параметры как второй лучший вариант...Встроенный SQL сделает ваш сайт открытым для SQL-инъекций, вредоносных программ и прочего.
Позднее объявление переменных может привести к небрежному кодированию.Используйте «имя явного параметра» и объявляйте переменные в верхней части функции.Это скорее лучшая практика, чем настоящий WTF, но лучше начинать так, как вы хотите идти дальше.
Никаких подсказок для базы данных о том, какой это тип соединения - оно только для чтения или пользователь будет обновлять записи?Соединение можно оптимизировать, и база данных сможет очень эффективно обрабатывать блокировки, если ей будет эффективно указано, чего ожидать.
Соединение с базой данных не закрывается после использования, а объект набора записей не уничтожается полностью.
ASP по-прежнему остается сильным языком, несмотря на то, что многие люди предлагают перейти на .NET. При наличии хороших методов программирования можно написать сайт ASP, который будет простым в обслуживании, масштабируемым и быстрым, но вы ДОЛЖНЫ убедиться, что вы используете все доступные методы для создания ваш код эффективен, вы ДОЛЖНЫ поддерживать хорошие методы кодирования и немного предусмотрительности.Хороший редактор тоже поможет, я предпочитаю PrimalScript, который я считаю более полезным для программиста ASP, чем любой из последних продуктов MS, которые кажутся очень .NET-ориентированными.
И откуда поле «MEMO»?Это номенклатура Access или, может быть, MySQL?Я спрашиваю, поскольку такие поля в MS-SQL уже десять лет называются полями TEXT или NTEXT.
Запомни программа в язык, а не программа на нем.Тот факт, что вы используете ограниченный набор инструментов, не означает, что вам нужно программировать так, как будто сейчас 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.
Подтверждаю некоторые идеи и добавляю несколько своих:
1) Лучший способ получить доступ к базе данных - абстрагировать ее в какой-то компонент COM, к которому вы получаете доступ из VBScript.
2) Если вы действительно этого хотите, вы можете написать контроллер на VBScript, а затем получить к нему доступ на странице.Это будет напоминать шаблон Page Controller, а не Front Controller, который вы увидите в ASP.NET MVC или MonoRail.
3) Почему ты делаешь это с собой?Большинство инструментов, необходимых для выполнения такого рода работ, больше даже не доступны.
AX — Asp Xtreme Evolution — это платформа MVC для классического ASP.
Есть несколько попыток создания тестовых фреймворков для asp:aspUnit хорош, но больше не поддерживается.
Несколько месяцев назад я видел образец того, как сделать свой собственный.В примере nUnit использовался для вызова функций веб-сайта для автоматического тестирования.думаю, у меня это получилось здесь (у меня линия прервана, поэтому я не могу проверить)
По номеру 2, я думаю, у вас есть несколько вариантов...
1) Вы можете использовать COM-компоненты, разработанные в VB6 или тому подобное, чтобы отделить часть вашей бизнес-логики от пользовательского интерфейса.
2) Вы можете создавать классы в VBScript.В реализации отсутствует концепция наследования и другие более продвинутые функции, но вы можете инкапсулировать логику в классы, что помогает уменьшить спазматичность вашего приложения.Посмотрите это: http://www.4guysfromrolla.com/webtech/092399-1.shtml
Я согласен с @Cirieno, что выбранный ответ было бы нецелесообразно использовать в рабочем коде по всем причинам, которые он упоминает.Тем не менее, если у вас есть небольшой опыт, этот ответ станет хорошей отправной точкой для изучения основ.
В моем опыте работы с ASP я предпочитал писать уровень доступа к базе данных с использованием VB, компилируя его в DLL и ссылаясь на DLL через VBScript.Трудно отлаживать напрямую через ASP, но это был хороший способ инкапсулировать весь код доступа к данным отдельно от кода ASP.
Далее в тот день, когда VBScript/ASP все еще в порядке, я работал в коммунальной компании с очень смешанной средой DB, я раньше ругался этим веб -сайтом: http://www.connectionstrings.com/
@michealpryor все понял правильно
Я застрял на ASP и чувствую вашу боль.
1) Лучший способ выполнения запросов к SQL Server — это параметризованные запросы;это поможет предотвратить атаки с использованием SQL-инъекций.
Учебник (не мой блог):
http://www.nomadpete.com/2007/03/23/classic-asp-that-is-still-alive-and-parametized-queries/
2) Я не видел ничего, касающегося MVC, специально ориентированного на ASP, но мне определенно интересно, потому что мне трудно уяснить это.Обычно я стараюсь по крайней мере содержать вещи, похожие на представления, и вещи, похожие на контроллеры, в отдельных функциях.Я полагаю, вы могли бы написать код в отдельных файлах, а затем использовать серверные включения, чтобы объединить их все вместе.
3) Вероятно, вы используете язык, в котором встроено больше функций.На первый взгляд может показаться, что некоторых вещей не хватает, но зачастую это просто вопрос написания гораздо большего количества строк кода, чем вы привыкли.
Также для доступа к базе данных у меня есть набор функций — GetSingleRecord, GetRecordset и UpdateDatabase, функция которых аналогична той, о которой Майкл упоминал выше.