ASP 강의 7: ASP와 데이터베이스 (2)
저자:Eve Cole
업데이트 시간:2009-05-30 19:55:02
지난 강의에서는 데이터베이스에 연결하는 방법과 데이터베이스에서 데이터를 가져오는 방법을 배웠습니다. 오늘의 내용은 데이터베이스에 새로운 데이터를 추가하는 방법, 데이터베이스에 있는 데이터를 수정하고 삭제하는 방법입니다.
1. 데이터베이스에 새 데이터를 추가하는 방법 1: wuf50.asp와 같은 SQL 문을 사용합니다.
향후 절차를 단순화하기 위해 Access 데이터베이스와의 연결 부분은 파일에 배치됩니다. 이 파일은 향후 필요할 때 설명하지 않습니다.
<% 'AdoAccess.asp
옵션 명시적
응답.만료 = 0
'1부: 연결 설정
희미한 Cnn, StrCnn
Cnn = Server.CreateObject("ADODB.Connection") 설정
StrCnn = "공급자 = Microsoft.Jet.OLEDB.4.0; 데이터 원본 = C:InetpubhomeaspNorthwind.mdb"
Cnn.StrCnn 열기
%>
프로그램 wuf50.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<% ' wuf50.asp
'2부: Connection 개체 실행을 사용하여 새 데이터 추가
희미한 StrSQL, rsTest
StrSQL = "INSERT INTO 배송업체(회사 이름, 전화번호) VALUES('wu''feng','0571-7227298')"
Cnn.StrSQL 실행
%>
<HTML>
<본문>
<% '3부: 획득한 레코드 세트를 브라우저에 표시
Set rsTest = Cnn.Execute("Select * From Carrier")
rsTest.EOF가 아닌 동안 수행
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
고리
'파트 4: 전장 청소
Cnn.닫기
rsTest = 없음 설정: Cnn = 없음 설정
%>
</BODY>
</HTML>
다음 사항에 유의하세요.
1. SQL 문을 사용하여 Access 데이터베이스에 데이터를 추가하는 경우 삽입을 사용해야 합니다. SQL Server 데이터베이스에 데이터를 추가하려면 삽입만 사용하세요.
2. SQL 문을 사용하여 데이터를 추가하는 형식은 위의 예와 같습니다. SQL 문은 문자열 구분 기호로 'wu'feng'을 사용하므로 구문에 'wu'feng'을 사용해야 합니다.
3. 이 예제를 이전에 배운 내용과 결합하여 HTML 양식에서 데이터를 추가할 수 있습니다.
4. 이 예에서는 "발송인 ID"와 같이 자동 번호 매기기 데이터 유형이 있는 필드가 있으므로 증분 번호를 얻기 위해 코드를 작성하는 방법을 생각할 필요가 없습니다.
방법 2: wuf51.asp와 같은 Recordset 개체의 Addnew 메서드를 사용합니다.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf51.asp
'2부: Recordset 개체의 AddNew 메서드를 사용하여 새 데이터 추가
희미한 StrSQL, rsTest
rsTest = server.CreateObject("ADODB.Recordset") 설정
rsTest.CursorType = adOpenKeySet 'adOpenDynamic
'다음 문장이 없으면 데이터베이스 업데이트가 허용되지 않습니다. 이유는 무엇입니까?
rsTest.LockType = adLockOptimistic
rsTest.Open "배송업체",Cnn,,,adCmdTable
rsTest.AddNew
rsTest("회사 이름") = "우펑"
rsTest("전화") = "0571-7227298"
rsTest.업데이트
%>
<HTML>
<본문>
<% '3부: 획득한 레코드 세트를 브라우저에 표시
'데이터베이스 포인터를 테이블의 첫 번째 레코드로 이동합니다.
rsTest.EOF <> 0이 아니면
Response.Write "테이블에 [" & rsTest.RecordCount & "]개의 데이터 조각이 있습니다." & "<Br><Br>"
rsTest.MoveFirst
종료 조건
rsTest.EOF가 아닌 동안 수행
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
고리
'파트 4: 전장 청소
Cnn.닫기
rsTest = 없음 설정: Cnn = 없음 설정
%>
</BODY>
</HTML>
분석하다:
1. rsTest.LockType = adLockOptimistic을 설정하는 이유
Recordset 개체의 LockType 속성에는 다음 네 가지 선택적 값이 있습니다.
adLockReadOnly - 레코드 집합이 읽기 전용 모드로 열리므로 데이터를 변경할 수 없음을 나타내는 기본값입니다. 이 경우 AddNew 메서드를 사용할 때 오류가 발생합니다.
adLockPessimistic - 보수적인 레코드 잠금(항목별)입니다. 편집 시 데이터소스의 기록을 즉시 잠그는 방식을 사용합니다. 현재 다른 사용자는 해당 데이터에 접근할 수 없습니다.
adLockOptimistic – 개방형 레코드 잠금(항목별)입니다. Update 메서드가 호출될 때만 레코드가 잠깁니다. 생각해 보십시오. 이 속성은 우리가 이야기한 Application 개체의 Lock 및 Unlock 속성과 유사합니까?
adLockBatchOptimistic - 일괄 업데이트를 엽니다. UpdateBatch 메서드에 따라 일괄적으로 데이터를 업데이트하는 데 사용됩니다.
그런데 이전 강의에서 언급한 CursorType 속성에 대해 언급해 보겠습니다. 이 속성에도 네 가지 값이 있습니다.
adOpenForwardOnly - 앞으로만 커서(기본값)는 레코드에서 앞으로만 스크롤할 수 있습니다. 이렇게 하면 리소스가 절약되고 성능이 향상됩니다.
adOpenStatic - 정적 커서. 데이터를 찾거나 보고서를 생성하는 데 사용할 수 있는 레코드 모음의 정적 복사본입니다. 또한 다른 사용자가 추가, 변경 또는 삭제한 내용은 표시되지 않습니다. ASP에서는 이 두 커서만 사용하는 것이 좋습니다.
adOpenKeyset - 키 세트 커서. 키 세트 커서는 다른 사용자가 추가한 레코드를 볼 수 없고 다른 사용자가 삭제한 레코드에 액세스할 수 없다는 점을 제외하면 동적 커서와 유사합니다.
adOpenDynamic - 동적 커서. 다른 사용자가 추가, 변경, 삭제한 내용을 볼 수 있습니다. 레코드세트 내에서 모든 유형의 이동이 허용됩니다.
확실한 것은 그러한 추상적인 설명이 다소 그럴듯하고, 간단히 말해서 아직도 잘 이해되지 않는다는 것입니다.
(1) 데이터만 검색하는 경우에는 기본값을 사용하세요.
(2) Update 메서드를 사용하여 데이터를 업데이트하는 경우 LockType 특성에 adLockOptimistic을 사용하고, UpdataBatch 메서드를 사용하여 일괄적으로 데이터를 업데이트하는 경우 adLockBatchOptimistic을 사용합니다.
(3) 데이터베이스에 대한 쓰기 작업이 있는 경우 일반적으로 CursorType 속성에 adOpenKeyset을 사용하는 것으로 충분합니다.
어때요? 아직 이해하지 못하더라도 사용해도 됩니다.
2. 데이터베이스에 대해 잘 알지 못하는 경우 출력이 표시되기 전에 rsTest.MoveFirst를 사용하여 포인터를 첫 번째 레코드로 이동하는 것이 유용한 경우가 많습니다. 단, 데이터베이스에 데이터가 없으면 MoveFirst 메소드를 사용할 수 없으므로 rsTest.EOF 속성을 이용하여 데이터베이스에 데이터가 있는지 확인 후 사용한다.
3. RecordCount 속성(레코드세트의 레코드 수를 가져오기 위한)은 커서 유형이 adOpenKeyset 또는 adOpenStatic으로 설정된 경우에만 사용할 수 있습니다.
2. 데이터베이스의 기존 데이터를 수정합니다. 방법 1: SQL 문을 사용합니다. 예를 들어 wuf52.asp는 기본적으로 wuf50.asp와 유사하며 여기에는 주요 부분만 나열되어 있습니다.
'2부: Connection 개체의 Execute 메서드를 사용하여 데이터 수정
희미한 StrSQL, rsTest
StrSQL = "이동통신사 설정 전화 업데이트 = '(503) 555-3188' 전화가 '%99%'와 같은 곳에서"
Cnn.StrSQL 실행
데이터를 수정하려면 INSERT INTO...VALUES를 사용할 필요가 없으며 UPDATE...SET 문을 사용합니다. WHERE 절은 문자열 "99"("LIKE" 및 "%)가 포함된 전화번호를 변경하는 것을 의미합니다. "는 퍼지 쿼리에 자주 사용됩니다.) ~ (503) 555-3188, 조건이 설정되지 않으면 테이블의 모든 전화번호가 변경됩니다.
방법 2: Recordset 개체의 Update 메서드를 사용합니다. 프로그램 wuf53.asp(루틴 wuf51.asp와 유사)
'2부: Recordset 개체의 Update 메서드를 사용하여 데이터 수정
희미한 StrSQL, rsTest
rsTest = server.CreateObject("ADODB.Recordset") 설정
rsTest.LockType = adLockOptimistic
StrSQL = "직원 WHERE 생년월일 = #55-03-04#에서 성, 이름, 생년월일을 선택하세요."
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest("name") = "중국어"
rsTest.업데이트
분석하다:
1. SQL 문에서 데이터베이스가 Access 데이터베이스인 경우 날짜를 #55-03-04#로 묶어야 하며, SQL Server 데이터베이스인 경우 날짜를 '55-03'으로 묶어야 합니다. -04'.
2. rsTest.Open StrSQL, Cnn,,,adCmdText에서는 첫 번째 매개 변수가 SQL 문이므로 다섯 번째 매개 변수는 adCmdText입니다. 실제로 다섯 번째 매개 변수는 생략할 수 있지만 추가하면 스크립트 실행 효율이 높아집니다.
3. 방법 1을 사용하면 조건을 충족하는 모든 레코드(여러 레코드 또는 하나의 레코드)를 한 번에 업데이트할 수 있지만, 방법 2의 업데이트는 현재 레코드(조건을 충족하는 첫 번째 레코드)만 수정할 수 있습니다.
3. 데이터베이스에서 데이터를 삭제합니다. 방법 1: SQL 문을 사용합니다. 루틴 wuf55.asp
'2부: SQL 문을 사용하여 데이터 삭제
희미한 StrSQL, rsTest
StrSQL = "전화번호 = '0571-7227298'인 이동통신사에서 삭제하세요."
Cnn.StrSQL 실행
방법 2: Recordset 개체의 삭제 메서드를 사용합니다. 루틴 wuf56.asp
'2부: Recordset 개체의 삭제 메서드를 사용하여 데이터 삭제
희미한 StrSQL, rsTest
rsTest = server.CreateObject("ADODB.Recordset") 설정
rsTest.LockType = adLockOptimistic
StrSQL = "SELECT * FROM 이동통신사 WHERE 전화번호 = '0571-7227298'"
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest.EOF가 아닌 동안
rsTest.삭제
rsTest.MoveNext
향하게 하다
조건을 충족하는 레코드 집합에 여러 레코드가 있는 경우 루프를 사용해야 합니다. 그렇지 않으면 삭제 메서드는 현재 레코드, 즉 조건을 충족하는 첫 번째 레코드만 삭제합니다.
4. 기타 유용한 지식
1. 일괄 데이터 업데이트 위에서는 Recordset 개체의 Update 메서드를 사용하여 데이터를 업데이트하는 방법에 대해 설명했습니다. 실제로 Recordset 개체는 즉시 업데이트와 일괄 업데이트라는 두 가지 업데이트 유형을 지원할 수 있습니다.
즉시 업데이트를 사용하면 Update 메서드가 호출되는 즉시 데이터에 대한 모든 변경 사항이 현재 데이터 소스에 기록됩니다.
일괄 업데이트를 통해 공급자는 여러 레코드에 대한 변경 사항을 캐시한 다음 UpdateBatch 메서드를 사용하여 단일 호출로 해당 변경 사항을 데이터베이스로 전송할 수 있습니다. 여러 레코드를 업데이트하는 경우 일괄 업데이트가 즉시 업데이트보다 효율적입니다.
기본값은 즉시 업데이트 모드입니다. 일괄 업데이트 모드를 사용하려면 wuf54.asp와 같은 클라이언트 커서를 사용하십시오.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf54.asp
'파트 2: 일괄 업데이트 모드
희미한 StrSQL, rsTest
rsTest = server.CreateObject("ADODB.Recordset") 설정
rsTest.CursorLocation = adUseClient '클라이언트 커서 유형 사용
rsTest.LockType = adLockBatchOptimistic
StrSQL = "SELECT * FROM 이동통신사 WHERE 전화 LIKE '%99%'"
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest.MoveFirst
rsTest.EOF가 아닌 동안
rsTest("회사 이름") = "중국어"
rsTest.MoveNext
향하게 하다
rsTest.UpdateBatch
%>
<HTML>
<본문>
<% '3부: 획득한 레코드 세트를 브라우저에 표시
rsTest.Requery
rsTest.EOF가 아닌 동안 수행
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
고리
'파트 4: 전장 청소
Cnn.닫기
rsTest = 없음 설정: Cnn = 없음 설정
%>
</BODY>
</HTML>
알아채다:
1) rsTest.CursorLocation = adUseClient에는 두 개의 값이 있으며, 다른 값은 adUseServer(기본값)입니다. 초보자에게 Recordset 개체의 커서 유형은 점점 더 혼란스러워지지 않도록 여기에서는 자세히 소개하지 않겠습니다. .실제 처리 과정에서 천천히 살펴보시기 바랍니다(더 시도해 보세요).
2) rsTest.Requery: Requery 메소드를 사용하여 데이터 소스의 Recordset 개체의 전체 내용을 새로 고칩니다. 이 메서드를 호출하는 것은 Close 및 Open 메서드를 연속적으로 호출하는 것과 같습니다.
2. Recordset 개체의 Filter 속성을 사용하는 방법 알아보기
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf57.asp
'2부: Recordset 개체의 Filter 속성 사용
희미한 StrSQL, rsTest
rsTest = server.CreateObject("ADODB.Recordset") 설정
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimistic
rsTest.Open "배송업체",Cnn,,,adCmdTable
'기준에 맞는 레코드를 필터링하고 다른 레코드는 필터링합니다.
rsTest.Filter = "회사 이름 = 'wu''feng'"
If rsTest.EOF Then '해당 레코드가 없으면 추가합니다.
rsTest.AddNew
rsTest("회사 이름") = "우펑"
rsTest("전화") = "0571-7227298"
rsTest.업데이트
Else '조건에 맞는 레코드가 있으면 조건에 맞는 첫 번째 레코드를 수정합니다.
rsTest("전화") = "(571) 7227298"
rsTest.업데이트
종료 조건
%>
<HTML>
<본문>
<% '3부: 획득한 레코드 세트를 브라우저에 표시
'다음 문장에서 '예'와 '아니오'의 차이를 잘 비교해 보세요.
'rsTest.Filter="" '필터 속성을 지우는 데 사용됩니다.
rsTest.MoveFirst
rsTest.EOF가 아닌 동안 수행
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
고리
'파트 4: 전장 청소
Cnn.닫기
rsTest = 없음 설정: Cnn = 없음 설정
%>
</BODY>
</HTML>
3. 위에서 소개한 두 가지 방법 외에도 SQL 문과 Command 개체의 Excute 메서드를 사용하여 데이터베이스를 유지 관리할 수도 있습니다. 예 wuf58.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf58.asp
'2부: SQL 문과 Command 개체의 Excute 메서드를 사용하여 데이터베이스 유지 관리
희미한 StrSQL, rsTest, cmdChange
StrSQL = "INSERT INTO 배송업체(회사 이름, 전화번호) VALUES('wu''feng','0571-7227298')"
'명령 개체를 만듭니다.
cmdChange =server.CreateObject("ADODB.Command") 설정
cmdChange.ActiveConnection = Cnn 설정
cmdChange.CommandText = StrSQL
cmdChange.실행
%>
<HTML>
<본문>
<% '3부: 획득한 레코드 세트를 브라우저에 표시
rsTest = server.CreateObject("ADODB.Recordset") 설정
rsTest.Open "배송업체", Cnn, , , adCmdTable
rsTest.EOF가 아닌 동안 수행
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
고리
'파트 4: 전장 청소
Cnn.닫기
rsTest = 없음 설정: Cnn = 없음 설정
%>
</BODY>
</HTML>
본 강의에서는 데이터를 유지하는 세 가지 방법을 주로 소개합니다. 초보자는 처음 두 가지 방법만 익히면 됩니다. 일반적으로 SQL 문을 사용하여 문제를 해결해 보십시오. 이는 간단하고 명확합니다. Recordset 개체를 사용하는 가장 큰 장점은 많은 수의 속성과 풍부한 커서 유형을 활용할 수 있다는 것입니다. 또한 사용하기가 다소 어렵습니다. 더 많은 것을 탐색하고 더 많이 실험하는 것이 핵심입니다.