2

일부 오래된 코드를 살펴보면서 내가 이해할 수없는 부분을 발견했습니다 .... 제가 말할 수있는 한, 그것은 단지 간단한 삽입입니다. 그러나 그들은 왜이 방법으로 그것을 했습니까? 삽입물로 다시 쓸 수 있을까요, 아니면 무언가를 깨뜨릴 수 있습니까?클래식 ASP 이해하기

아래를 참조하십시오 :

Set TextRS = Server.CreateObject("ADODB.RecordSet") 
Set TextRS.ActiveConnection = Conn 
TextRS.Source = "SELECT IDX,TIMESTAMP,CURRENTFLAG,TEXT FROM " & TextTable & " WHERE 1=2 FOR UPDATE" 
TextRS.CursorLocation = 2 
TextRS.CursorType = 3 
TextRS.Open ,,,3 

TextRS.AddNew 
TextRS(0).Value = IDX 
TextRS(1).Value = Timestamp 
TextRS(2).Value = "Y" 
    TextRS(3).AppendChunk TextPiece 
TextRS.Update 

TextRS.Close 
+0

삽입 문을 매개 변수화하고 SQL 삽입을 피하는 한 가지 방법. 이를 INSERT 문으로 변경하면 쿼리를 매개 변수화해야합니다. –

답변

5

소스의이 부분은 .... where 1 = 2 나에게 조금 혼란 ??? 일치하는 항목이 없도록하는 것이 분명했습니다.

어쨌든이 스타일의 프로그래밍은 ADO 기술을 사용하여 비교적 오래되었으며 DAO에서 ADO로 오는 사람들은 데이터베이스를 반복하여 커서를이 방법으로 여는 경우가 있습니다 ... 일을하는 방법에 대한 모범 사례를 따르지 않습니다 삽입 문으로 대체 할 수 있고해야합니다!

pre jet4.0/access 2000으로 작성되었을 가능성이 있습니다.이 경우 매개 변수가있는 저장 프로 시저를 시뮬레이트하려는 시도였습니다. 시스템이 그 이상인 경우라면 여러 가지 이점이 있으므로 저장 프로 시저를 사용하는 것이 좋습니다. 캐시 된 실행 계획, SQL 주입 가능성을 줄이기위한 매개 변수

실제로 12 년 전 또는 그 전처럼 코드를 작성하는 데 실제로 사용되었습니다. 주로 사용법에 관계없이 더 잘 알지 못했기 때문입니다.

+1

그 코드는 모든 코드가 레코드를 삽입 할 때 결과가 반환되지 않도록합니다. –

+0

DB 코딩의이 스타일이 실제로 어디에서 왔는지에 대한 대답은 +1입니다. – AnthonyWJones

+1

-1 : 원래 프로그래머에게 약간의 크레딧을 주어야한다고 생각합니다. 한 가지는 반복이없고 '1 = 2'는 쓸모가 없다는 것입니다. 스키마 정의를 포함하는 빈 레코드 세트를 검색하는 데 사용됩니다. 실제로는 멋진 트릭입니다. paramterized 쿼리를 시뮬레이션하여 SQL 주입을 피하는 쉬운 방법으로 수행되었습니다. 다시 작성을 INSERT로 제안하지만 매개 변수가있는 쿼리를 사용하지 말고 사용되는 기술의 가장 중요한 이점 중 하나를 부정합니다. – RedFilter

1

매개 변수화 된 ADO 쿼리를 사용하여이 내용을 다시 작성합니다. 사용되는 방법에 불필요한 SELECT이있어 INSERT이 느려집니다.

코드가 약간은 잘 보이지 않지만 값이 설정되고 레코드 세트가 다시 저장 될 수 있도록 레코드 세트 행의 빈 인스턴스가 만들어집니다. 이것은 곧바로 INSERT하는 것보다 훨씬 느립니다.

1

저는 insert 문을 사용합니다. 위에서 언급 한 코드는 "ADO가 나를 위해 일하게하십시오"와 같이 조금 "게으른"것처럼 보입니다. 그러나, 그것에는 정말로 잘못된 것이 없습니다. where 1=2 부분은 "빈 테이블"을 반환하기 위해 거기에 ... 음 ... 나는 레코드 세트를 의미합니다.

2

아, 좋은 오래된 고전적인 ASP는)

1 = 2이 일치하는 항목을 반환 결코 SQL을 강제로. 이는 기본적으로 명령을 작성하는 방법입니다 (?). 그러면 값을 "편리하게"변경할 수 있고 업데이트가이를 저장합니다.

나는 그것을 전에 보았지만 결코 그렇게하지 않았다. 다른 사람들이 말했듯이, 단순한 paremetised INSERT 문이 더 좋을 것입니다, IMO.