2008-08-25 9 views
7

У меня есть несколько вопросов, касающихся VBScript и ASP Classic:VBScript/ASP Классический

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

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

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

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

+1

У вас есть мои сердечные симпатии. –

ответ

20

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

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

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

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

3

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

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

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

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

+1

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

1

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

@michealpryor получил это право

1

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

+0

@Fionnuala неработающая ссылка? backback it: http://web.archive.org/web/20071221011242/http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/ – frumbert

8

Помните, что программа в программе отличается от нее программой. Просто потому, что вы используете ограниченный набор инструментов, это не значит, что вам нужно программировать, как в 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 будет иметь следующее: МКП-APP-CommonIncludes.asp - Это включает в себя такие вещи, как мои общие библиотеки (Доступ к базе данных, функции файлов и т. Д.) И устанавливает безопасность и включает в себя любые файлы конфигурации (например, строки подключения, местоположения каталогов и т. Д.) И общие классы (пользователь, разрешение и т. Д.) И включается в каждую страницу.

Модули/ModuleName/page.vb.asp - Как код за страницей. Включает в себя классы BO, BLL и DAL для конкретных страниц и устанавливает данные, необходимые для страницы/принимает данные формы заявки и т. Д.

Модули/ModuleName/Display/INC-DIS-Page.asp - отображает данные, настроенные на странице .vb.asp.

1

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

16

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

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

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

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

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

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

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

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

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

+0

1. putt соединение внутри скрипта не означает, что строка подключения подвергается посетителю. 2. Использование процедуры хранения означает потерять гибкость. Кроме того, используя встроенный sql, вы можете предотвратить SQL-инъекцию. –

+2

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

+0

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

2

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

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

3

AX - Asp Xtreme Evolution является основой MVC для ASP классического

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

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

+0

Awesome. Если бы я все еще работал на этой работе, я был бы счастлив. :-) –