Вопрос

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

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

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

  3. Что еще мне следует знать о 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, поскольку они подумают, что это профессиональный способ кодирования на языке!

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

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

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

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

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

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, функция которых аналогична той, о которой Майкл упоминал выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top