У меня есть пара вопросов по 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)
По пункту 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). Возможно, вы не использовали его годами, но это не значит, что другие люди все еще не используют его, независимо от того, насколько они разумны. (Выгода от работы по контракту: вход и выход быстро. Проблема с работой по контракту: необходимость предоставить решение в рамках существующей структуры.)
давным-давно, когда 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/…
Не забывайте программа в язык, а не программу на нем. Тот факт, что вы используете ограниченный набор инструментов, не означает, что вам нужно программировать, как в 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, поскольку они будут думать, что это профессиональный способ кодирования на этом языке!
НИКОГДА не раскрывайте строку подключения в своем коде, поскольку она содержит имя пользователя и пароль для вашей базы данных. Вместо этого используйте файл UDL или, по крайней мере, константу, которую можно объявить в другом месте и использовать на всем сайте.
Больше нет оправдания для использования встроенного SQL для любой операции в веб-среде. Используйте хранимую процедуру - нельзя переоценить преимущества безопасности. Если вы действительно не можете этого сделать, то посмотрите на встроенные параметры как на второй лучший вариант ... Встроенный SQL оставит ваш сайт открытым для SQL-инъекций, вредоносных программ и прочего.
Позднее объявление переменных может привести к неаккуратному кодированию. Используйте «явную опцию» и объявляйте переменные в верхней части функции. Это лучшая практика, а не настоящий WTF, но лучше начинать так, как вы хотите продолжать.
Никаких подсказок для базы данных о том, какой это тип подключения - это только для чтения, или пользователь будет обновлять записи? Соединение может быть оптимизировано, а база данных может очень эффективно обрабатывать блокировку, если ей точно сказать, чего ожидать.
После использования соединение с базой данных не закрывается, и объект набора записей не уничтожается полностью.
ASP по-прежнему остается сильным языком, несмотря на то, что многие люди предлагают перейти на .NET - с хорошей практикой кодирования можно написать сайт ASP, который будет легко поддерживать, масштабируемым и быстрым, но вы ДОЛЖНЫ убедиться, что используете все доступные методы для создания ваш код эффективен, вы ДОЛЖНЫ поддерживать хорошие методы кодирования и немного предусмотрительности. Хороший редактор тоже поможет, я предпочитаю PrimalScript, который я считаю более полезным для кодировщика ASP, чем любой из последних продуктов MS, которые кажутся очень ориентированными на .NET.
Кроме того, откуда взялось поле «MEMO»? Это номенклатура Access или, может быть, MySQL? Я спрашиваю, как такие поля в течение десяти лет назывались полями TEXT или NTEXT в MS-SQL.
1. Помещение соединения внутри скрипта не означает, что строка соединения видна посетителю. 2. Использование процедуры хранения означает потерю гибкости. Также, используя встроенный sql, вы можете предотвратить внедрение sql.
1. Если ваш веб-сервер взломан или к нему осуществляется доступ каким-либо способом, ваша база данных теперь также является открытой целью благодаря имени пользователя и паролю, находящимся прямо в коде.
2. Когда я начал использовать ASP несколько лет назад, я действительно верил в это, но это очень наивная точка зрения, и они действительно повышают эффективность кода и сервера (кэширование запросов = более быстрые данные), они формализуют процессы разработки (обеспечивая правильность типы данных и т. д.), и они добавляют гибкости (легче изменить интерфейс или иметь несколько способов доступа к данным). 3. Да, вы можете предотвратить SQL-инъекцию с помощью встроенного SQL, но зачем добавлять работу для себя, когда есть проверенный временем метод, который любой разработчик, использующий MS-SQL, может использовать для эффективного и безопасного получения и возврата данных?
Я согласен с @Cirieno, что выбранный ответ нецелесообразно использовать в производственном коде по всем причинам, которые он упоминает. Тем не менее, если у вас есть небольшой опыт, этот ответ станет хорошей отправной точкой в отношении основ.
По моему опыту работы с ASP, я предпочел писать уровень доступа к базе данных с помощью VB, компилируя его в DLL и ссылаясь на DLL через VBScript. Трудно отлаживать напрямую через ASP, но это был хороший способ инкапсулировать весь код доступа к данным вдали от кода ASP.
AX - Asp Xtreme Evolution - это среда MVC для классического ASP.
Есть несколько попыток создания тестовых фреймворков для asp: aspUnit хорош, но больше не поддерживается.
Несколько месяцев назад я видел образец того, как сделать свой собственный. В примере используется nUnit для вызова функций веб-сайта для автоматического тестирования. Я думаю, что получил его от здесь (моя линия заблокирована, поэтому я не могу проверить)
Примите мои искренние соболезнования.