문제

VBScript 및 ASP Classic에 관해 몇 가지 질문이 있습니다.

  1. VBScript/ASP에서 MS SQL Server 데이터베이스에 액세스하는 데 선호되는 방법은 무엇입니까?

  2. 컨트롤러의 뷰와 모델을 분리하는 것과 관련된 모범 사례는 무엇입니까?

  3. VBScript나 ASP에 대해 알아야 할 다른 사항이 있습니까?

눈치 채지 못했다면 저는 VBScript 코딩을 처음 접했습니다.나는 숫자 2와 3이 지나치게 일반적인 일종의 거대한 "블랙홀" 질문이라는 것을 알고 있으므로 여기에서 그 두 질문에 대해 알아야 할 모든 것을 배울 것이라고 기대하지 마십시오.

도움이 되었습니까?

해결책

ADO는 VBScript / Classic ASP에서 데이터베이스에 액세스하는 훌륭한 방법입니다. 라코 디스

추가 정보 : http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

한 가지주의 할 점은 레코드 세트에서 메모 필드를 반환하는 경우 한 번에 하나의 메모 필드 만 선택하고 쿼리의 마지막 열인지 확인해야한다는 것입니다.그렇지 않으면 문제가 발생합니다. (참조 : http://lists.evolt.org/archive/Week-of-Mon-20040329 / 157305.html )

다른 팁

첫 번째 답변을 보고 PC를 떠나야 했는데, 이렇게 많은 분들의 승인을 받았다는 게 아직도 괴로워요.이는 최악의 ASP 코드 종류에 대한 끔찍한 예입니다. 귀하의 사이트가 SQL 삽입 가능하도록 보장하고, 사이트 전체에서 이 코드를 계속 사용하면 수명의 1인치 이내에 해킹이 가능하도록 하는 종류입니다.

이것은 ASP 코딩을 처음 접하는 사람에게 제공해야 하는 종류의 코드가 아닙니다. ASP 코딩을 전문적인 언어 코딩 방법이라고 생각할 것이기 때문입니다!

  1. 데이터베이스에 대한 사용자 이름과 비밀번호가 포함되어 있으므로 코드에서 연결 문자열을 공개하지 마십시오.대신 UDL 파일을 사용하거나 최소한 다른 곳에서 선언하고 사이트 전체에서 사용할 수 있는 상수를 사용하세요.

  2. 웹 환경의 모든 작업에 인라인 SQL을 사용하는 데 더 이상 변명의 여지가 없습니다.저장 프로시저를 사용하세요. 보안상의 이점은 아무리 강조해도 지나치지 않습니다.정말로 그렇게 할 수 없다면 인라인 매개변수를 차선책으로 살펴보세요.인라인 SQL은 귀하의 사이트를 SQL 주입, 맬웨어 주입 및 기타 공격에 노출되게 만듭니다.

  3. 변수를 늦게 선언하면 코딩이 엉성해질 수 있습니다."optionexplicit"을 사용하고 함수 상단에 변수를 선언하십시오.이는 실제 WTF라기보다는 모범 사례이지만 계속하려는 의도대로 시작하는 것이 가장 좋습니다.

  4. 이것이 어떤 유형의 연결인지에 대한 힌트가 데이터베이스에 없습니다. 읽기 전용입니까, 아니면 사용자가 레코드를 업데이트합니까?연결은 최적화될 수 있으며, 예상되는 내용을 효과적으로 알려준다면 데이터베이스는 잠금을 매우 효율적으로 처리할 수 있습니다.

  5. 사용 후 데이터베이스 연결이 닫히지 않으며 레코드 세트 개체가 완전히 삭제되지 않습니다.

많은 사람들이 .NET으로 전환할 것을 제안하고 있음에도 불구하고 ASP는 여전히 강력한 언어입니다. 좋은 코딩 방법을 사용하면 유지 관리가 쉽고 확장 가능하며 빠른 ASP 사이트를 작성할 수 있지만 이를 위해서는 사용 가능한 모든 방법을 사용해야 합니다. 코드가 효율적이려면 좋은 코딩 방법을 유지하고 약간의 사전 고려가 필요합니다.좋은 편집기도 도움이 될 것입니다. 저는 .NET 중심으로 보이는 최신 MS 제품보다 ASP 코더에 더 도움이 되는 PrimalScript를 선호합니다.

또한 "MEMO" 필드는 어디에서 왔나요?이것이 액세스 명명법입니까, 아니면 MySQL입니까?지난 10년 동안 MS-SQL에서는 그러한 필드를 TEXT 또는 NTEXT 필드라고 불렀기 때문에 묻습니다.

언어에 프로그래밍하는 것보다 프로그래밍 하는 것을 잊지 마십시오.제한된 도구 세트를 사용한다고해서 1999 년처럼 프로그래밍해야하는 것은 아닙니다.

수업에 대해 JasonS와 동의합니다.상속과 같은 것은 할 수 없지만 쉽게 속일 수 있다는 것은 사실입니다 라코 디스

내 프로젝트에서 ASP 페이지에는 다음이 포함됩니다. INC-APP-CommonIncludes.asp-여기에는 일반 라이브러리 (데이터베이스 액세스, 파일 함수 등)와 같은 항목이 포함되고 보안을 설정하며 모든 구성 파일 (연결 문자열, 디렉터리 위치 등) 및 공통 클래스 (사용자, 권한)가 포함됩니다.등) 모든 페이지에 포함됩니다.

Modules / ModuleName / page.vb.asp-페이지 뒤의 코드와 같은 종류입니다.페이지 별 BO, BLL 및 DAL 클래스를 포함하고 페이지에 필요한 데이터를 설정 / 제출 된 양식 데이터 등을받습니다.

Modules / ModuleName / Display / INC-DIS-Page.asp-page.vb.asp에 설정된 데이터를 표시합니다.

몇 가지 아이디어를 반영하고 몇 가지 아이디어를 추가 :

1) 데이터베이스에 액세스하는 가장 좋은 방법은 VBScript에서 액세스하는 일종의 COM 구성 요소로 추상화하는 것입니다.

2) 정말로 원한다면 VBScript로 컨트롤러를 작성한 다음 페이지에서 액세스 할 수 있습니다.ASP.NET MVC 또는 MonoRail에서 볼 수있는 전면 컨트롤러가 아닌 페이지 컨트롤러 패턴과 유사합니다

3) 자신에게이 일을하는 이유는 무엇입니까?이러한 종류의 작업을 수행하는 데 필요한 대부분의 도구는 더 이상 사용할 수 없습니다.

AXE-Asp Xtreme Evolution은 ASP 클래식 용 MVC 프레임 워크입니다.

ASP를위한 테스트 프레임 워크를 만들기위한 몇 가지 시도가 있습니다. aspUnit은 좋지만 더 이상 유지되지 않습니다.

몇 달 전에 직접 만드는 방법에 대한 샘플을 보았습니다. 이 예제는 자동 테스트를 위해 웹 사이트에 대해 함수를 호출하기 위해 nUnit을 사용했습니다. 여기 (내 라인이 지 겨서 확인할 수 없습니다)

2 번에는 몇 가지 옵션이있는 것 같습니다 ...

1) VB6 등에서 개발 된 COM 구성 요소를 사용하여 일부 비즈니스 로직을 UI에서 분리 할 수 있습니다.

2) VBScript에서 클래스를 만들 수 있습니다.상속에 대한 개념은 없으며 구현에서 누락 된 다른 고급 기능이 있지만, 앱의 간결함을 줄이는 데 도움이되는 논리를 클래스에 캡슐화 할 수 있습니다.다음을 확인하십시오. http://www.4guysfromrolla.com/webtech/092399-1.shtml

@Cirieno가 언급 한 모든 이유 때문에 선택한 답변이 프로덕션 코드에 사용하는 것이 현명하지 않다는 데 동의합니다.즉, 약간의 경험이 있다면이 답변은 기본 사항에 대한 좋은 출발점입니다.

ASP 경험에서 저는 VB를 사용하여 데이터베이스 액세스 계층을 작성하고 DLL로 컴파일하고 VBScript를 통해 DLL을 참조하는 것을 선호했습니다.ASP를 통해 직접 디버깅하기는 어렵지만 ASP 코드에서 떨어진 모든 데이터 액세스 코드를 캡슐화하는 좋은 방법이었습니다.

VBScript / ASP가 여전히 괜찮 았던 시절 저는 DB 환경이 매우 혼합 된 유틸리티 회사에서 일했습니다. 저는이 웹 사이트에서 맹세했습니다. http : // www.connectionstrings.com/

@michealpryor가 정답

저는 ASP를 구축하는 데 집착했고 여러분의 고통을 느낍니다.

1) SQL Server에 대해 쿼리하는 가장 좋은 방법은 매개 변수가있는 쿼리를 사용하는 것입니다. 이렇게하면 SQL 주입 공격을 방지 할 수 있습니다.

튜토리얼 (내 블로그 아님) :
http : //www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2) MVC와 관련하여 ASP에 특화된 MVC에 대해서는 본 적이 없지만 머리를 감싸는 데 어려움을 겪고 있기 때문에 확실히 관심이 있습니다. 나는 일반적으로 적어도 뷰와 같은 것들과 컨트롤러와 같은 것들을 별도의 기능에 포함하려고 노력합니다. 별도의 파일에 코드를 작성한 다음 서버 측 포함을 사용하여 모두 다시 결합 할 수 있다고 가정합니다.

3) 아마도 더 많은 기능이 내장 된 언어에서 왔을 것입니다. 처음에는 일부가 누락 된 것처럼 보일 수 있지만 사용하는 것보다 훨씬 더 많은 코드를 작성하는 문제 일 수 있습니다. to.

또한 데이터베이스 액세스를 위해 Michael이 위에서 언급 한 것과 유사한 기능을 가진 GetSingleRecord, GetRecordset 및 UpdateDatabase와 같은 기능 세트가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top