ASP 강의 9: ASP와 데이터베이스 (4)
저자:Eve Cole
업데이트 시간:2009-05-30 19:54:56
이번 강의에서는 주로 매개변수와 저장프로시저의 사용법을 소개하겠습니다.
1. Command 개체와 Parameter 개체를 사용하여 매개변수를 전송합니다. 본 강의에서는 주로 Microsoft SQL Server7.0 데이터베이스를 사용합니다. 먼저 백업용 연결 파일 AdoSQL7.asp를 생성합니다. 미래.
<% 'AdoSQL7.asp
옵션 명시적
응답.만료 = 0
'1부: 연결 설정
희미한 Cnn, StrCnn
Cnn = Server.CreateObject("ADODB.Connection") 설정
StrCnn = "공급자=sqloledb; 사용자 ID=sa; 비밀번호=; 초기 카탈로그=pubs; 데이터 소스=ICBCZJP"
Cnn.StrCnn 열기
%>
참고: 직접 사용하는 경우 데이터 소스를 데이터베이스 서버의 컴퓨터 이름으로 설정하세요.
또한 이전에는 Access 데이터베이스를 사용할 때 Microsoft Access97을 사용하여 필드와 데이터를 보는 것이 매우 편리했습니다. 그러나 SQL Server 데이터베이스를 사용할 때는 특히 데이터베이스 서버가 아닌 다른 컴퓨터에서 ASP 스크립트를 디버깅할 때 더욱 그렇습니다. 필드와 데이터를 보려면 데이터를 별도로 설치해야 합니다. Msqry32.exe(Microsoft Query) 이 파일은 Office97과 함께 설치되며 일반적으로 "Microsoft OfficeOffice" 디렉터리에 있습니다.
예 wuf70.asp:
<%@ LANGUAGE="VBSCRIPT" %>
<!--#include 파일="AdoSQL7.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf70.asp
희미한 cmdTest, prmTest, rsTest
'명령 객체 생성
cmdTest = Server.CreateObject("ADODB.Command") 설정
'Recordset 및 Command 개체는 ActiveConnection 속성을 통해 Connection 개체에 연결할 수 있습니다.
cmdTest.ActiveConnection = Cnn
'SQL 명령 - 두 개의 매개변수가 포함되어 있습니다. 사용하시겠습니까? 표현하다
cmdTest.CommandText = "작업 업데이트 job_desc = ? job_id = ?"
'명령 유형을 SQL 문으로 설정
cmdTest.CommandType = adCmdText
'Prepared' 속성은 SQL 명령을 먼저 컴파일할지 여부를 결정합니다. True로 설정하면 실행 속도가 빨라질 수 있습니다.
cmdTest.Prepared = 참
'매개변수 객체 생성
prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"network") 설정
'매개변수 데이터 컬렉션에 데이터 추가
cmdTest.Parameters.Append prmTest
prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12") 설정
cmdTest.Parameters.Append prmTest
'수정 실행 - 결과를 반환할 필요 없이 cmdTest.Execute를 사용하면 됩니다.
cmdTest.Execute
'매개변수를 재설정하고 실행 – 다른 데이터를 수정할 수 있습니다
cmdTest.Parameters("job_id") = "1"
cmdTest.Parameters("job_desc") = "테스트"
cmdTest.Execute
'실행할 매개변수를 재설정합니다.
cmdTest("job_id") = "14"
cmdTest("job_desc") = "재무"
cmdTest.Execute
Set rsTest = Cnn.Execute("작업에서 job_id,job_desc 선택")
rsTest.EOF가 아닌 동안
Response.Write rsTest(0) & rsTest(1) & "<br>"
rsTest.MoveNext
향하게 하다
Cnn.close: prmTest = 없음으로 설정
cmdTest = 없음 설정: Cnn = 없음 설정
%>
분석하다:
1. Command 개체의 CreateParameter 메서드는 SQL 명령 또는 저장 프로시저에 대한 매개 변수 개체를 만드는 데 사용됩니다. 총 5개의 매개 변수가 있습니다(5개 매개 변수는 모두 선택 사항입니다).
첫 번째 매개변수: 매개변수 개체의 이름입니다.
두 번째 매개변수: 매개변수 개체의 데이터 유형입니다. 유형이 너무 많습니다. ADO 도움말을 참조하세요. 여기서는 adVarChar(문자열 값), adSmallInt(2바이트 부호 있는 정수)입니다.
세 번째 매개변수: 매개변수 유형. 가능: adParamInput(입력 매개변수를 나타냄), adParamOutput(출력 매개변수를 나타냄), adParamReturnValue(반환 값을 나타냄), adParamUnknown(매개변수 유형을 결정할 수 없음을 나타냄), adParamInputOutput(입력/출력 매개변수를 나타냄)
네 번째 매개변수: 매개변수의 데이터 길이입니다. 특히 데이터 유형이 VarChar인 경우 오류를 방지하려면 데이터베이스의 해당 필드 길이와 동일하게 지정하는 것이 가장 좋습니다. 날짜 유형의 경우 이 값을 제공할 필요가 없습니다.
다섯 번째 매개변수: 매개변수 설정의 초기 값입니다.
2. cmdTest.Parameters.Append 메서드는 매개 변수 데이터 컬렉션에 Parameter 개체를 추가합니다. 이 예에서는 여러 매개 변수를 사용하는 방법도 확인할 수 있습니다.
3. 이 예에서 볼 수 있듯이 다른 데이터를 수정하려면 입력 매개변수만 재설정하면 됩니다. 이 아이디어는 프로그래밍에서 가장 일반적으로 사용되는 방법 중 하나이기도 합니다.
4. 매개변수를 재설정하려면 cmdTest.Parameters를 사용하거나 cmdTest("job_id")로 생략할 수 있습니다.
2. ASP에서 저장 프로시저 사용 저장 프로시저란 무엇입니까? 저장 프로시저는 데이터베이스 서버에 있으며 하나 이상의 SQL 문을 포함할 수 있는 SQL 문 모음입니다. 저장 프로시저를 만드는 방법은 여기에 포함되지 않습니다. 본 강의의 내용은 ASP에서 저장 프로시저를 호출하는 방법을 설명하기 위한 예제를 주로 제공합니다.
저장 프로시저를 사용하면 ASP 스크립트에서 SQL 명령을 실행하는 것보다 더 효율적이며, 전반적인 성능을 향상시키고 네트워크 부하를 줄일 수 있습니다(네트워크 서버와 데이터 서버 간의 상호 작용 감소). 코드 유연성 등을 향상시킵니다.
(1) 저장 프로시저에서 입력 매개 변수 사용 이 예제에서 사용된 저장 프로시저는 SQL Server 7.0에 포함된 "byroyalty"입니다. 여기에 포함된 SQL 문은 매우 간단합니다. 매개변수는 @percentage입니다.
절차 생성 byroyalty @percentage int
처럼
titleauthor에서 au_id를 선택하세요
여기서 titleauthor.royaltyper = @percentage
예 wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#include 파일="AdoSQL7.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf71.asp
희미한 cmdTest, prmTest, rsTest
cmdTest = Server.CreateObject("ADODB.Command") 설정
cmdTest.CommandText = "byroyalty" '저장 프로시저 이름
'명령 유형을 저장 프로시저로 설정
cmdTest.CommandType = adCmdStoredProc
'매개변수 객체 생성
prmTest = Server.CreateObject("ADODB.Parameter") 설정
'Type 속성은 wuf70.asp의 두 번째 매개변수에 해당합니다.
prmTest.Type = adInteger '4-byte signed int' 방향 특성은 wuf70.asp의 세 번째 매개변수에 해당합니다.
prmTest.Direction = adParamInput
'값 속성은 wuf70.asp의 다섯 번째 매개변수에 해당합니다.
prmTest.값 = 30
cmdTest.Parameters.Append prmTest
cmdTest.ActiveConnection = Cnn으로 설정
'레코드 세트를 반환해야 하므로 Set rsTest = cmdTest.Execute를 사용하십시오.
rsTest = cmdTest.Execute 설정
rsTest.EOF가 아닌 동안
Response.Write rsTest(0) & "<br>"
rsTest.MoveNext
향하게 하다
Cnn.닫기
rsTest = 없음 설정: prmTest = 없음 설정
cmdTest = 없음 설정: Cnn = 없음 설정
%>
CommandText 속성은 SQL 명령, 저장 프로시저 또는 테이블 이름을 지정할 수 있습니다.
이 예에서 Parameter 개체를 만드는 것은 wuf70.asp와 약간 다릅니다. 실제로 이 예에는 prmTest.Name, prmTest.Size, Type, Direction이라는 두 가지 사용되지 않은 속성이 있습니다. 및 wuf70.asp의 5개 매개변수에 해당하는 값.
(2) 출력 매개변수를 사용하여 레코드를 얻거나 데이터베이스 테이블에서 값을 계산하는 경우 출력 매개변수를 반환하는 저장 프로시저를 사용해야 합니다. 예를 들어 먼저 SQL Server의 pubs 라이브러리에 새 저장 프로시저 OUTemploy를 만듭니다. 이 저장 프로시저는 두 개의 날짜를 입력한 다음 최대값을 출력해야 합니다.
채용 절차 작성
(
@job_lvltinyint 출력,
@hire_date1 날짜시간,
@hire_date2 날짜/시간
)
처럼
직원에서 @job_lvl = MAX(job_lvl) 선택
여기서 고용 날짜 >= @hire_date1 및 고용 날짜 <= @hire_date2
저장 프로시저를 만드는 방법에는 여러 가지가 있습니다.
1. Microsoft SQL Server의 Enterprise Manager를 사용하여 연 후 왼쪽 트리 디렉터리에서 엽니다. 콘솔 루트 – Microsoft SQL Servers – SQL Server 그룹 – ICBCZJP(Windows NT) – 데이터베이스 – pubs – 저장 프로시저 – 새 저장 프로시저 . 저장 프로시저를 입력합니다. 마지막으로 문법 감지도 수행할 수 있습니다.
2. Microsoft SQL Server의 쿼리 분석기를 사용하여 먼저 데이터베이스 서버에 연결하고 pubs 데이터베이스를 선택합니다. 위의 저장 프로시저를 입력하고 쿼리 실행을 클릭하거나 F5 키를 누릅니다.
3. VB6.0을 사용하여 "보기"/"데이터 보기 창" 메뉴를 연 후 "데이터 링크"/"새 데이터 링크"를 마우스 오른쪽 버튼으로 클릭합니다.
4. ASP 스크립트를 사용하여 wuf75.asp와 같은 저장 프로시저를 만듭니다.
<% @LANGUAGE = VBScript %>
<!--#include 파일="AdoSQL7.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf75.asp
DimStrSQL
'참고: & Chr(10) & Chr(13)은 주로 멋진 외관을 위해 완전히 필요하지 않습니다.
StrSQL="CREATE PROCEDURE OUTemploy ( @job_lvltinyint OUTPUT, " & Chr(10) & Chr(13) &_
"@hire_date1 날짜시간, @hire_date2 날짜시간) AS " & Chr(10) & Chr(13) &_
"직원의 @job_lvl = MAX(job_lvl) 선택" &_
"여기서 고용 날짜 >= @hire_date1 및 고용 날짜 <= @hire_date2"
Cnn.StrSQL 실행
Response.Write "저장 프로시저를 성공적으로 생성했습니다."
Cnn.close: Cnn = 없음으로 설정
%>
저장 프로시저가 생성된 후 메뉴를 사용하는 것 외에도 SQL 문 "Drop Procedure OUTemploy"를 사용하여 삭제할 수도 있습니다.
예 wuf72.asp – 필요한 입력 매개 변수를 저장 프로시저에 보내고 출력 결과를 얻습니다.
<% @LANGUAGE = VBScript %>
<!--#include 파일="AdoSQL7.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf72.asp
희미한 cmdTest, prmTest
cmdTest = Server.CreateObject("ADODB.Command") 설정
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "OUTemploy" '저장 프로시저 이름
cmdTest.CommandType = adCmdStoredProc
'매개변수 객체 생성
prmTest = cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput) 설정
cmdTest.Parameters.Append prmTest
'adTinyInt - 1바이트 부호 있는 정수
'adDbDate - 날짜 값(yyyymmdd)
prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09") 설정
cmdTest.Parameters.Append prmTest
prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01") 설정
cmdTest.Parameters.Append prmTest
cmdTest.Execute
'다음 세 표현은 같은 의미를 가지고 있습니다.
응답.Write cmdtest("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl") & "<br>"
응답.쓰기 cmdTest.Parameters("job_lvl").값
Cnn.닫기
prmTest = 없음으로 설정
cmdTest = 없음 설정: Cnn = 없음 설정
%>
(3) 반환 코드 매개 변수를 사용하여 Return 문을 사용하여 저장 프로시저에서 다른 반환 코드를 반환합니다. 예를 들어 다음 저장 프로시저는 먼저 레코드 세트를 얻은 다음 Margaret이라는 직원이 있으면 1을 반환하고 그렇지 않으면 1을 반환합니다. 0을 반환합니다.
Returnemploy 프로시저 생성
처럼
직원의 emp_id, fname을 선택하세요.
존재하는 경우(fname='Margaret'인 직원에서 fname 선택)
반품(1)
또 다른
반품(0)
예 wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#include 파일="AdoSQL7.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf73.asp
희미한 cmdTest, prmTest, rsTest
cmdTest = Server.CreateObject("ADODB.Command") 설정
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "Returnemploy" '저장 프로시저 이름
cmdTest.CommandType = adCmdStoredProc
prmTest = cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue) 설정
cmdTest.Parameters.Append prmTest
rsTest = cmdTest.Execute() 설정
rsTest.EOF가 아닌 동안
Response.Write rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
향하게 하다
rsTest.Close: rsTest = 아무것도 설정하지 않음
'cmdtest("ReturnValue")를 반환하기 전에 rsTest를 먼저 닫아야 합니다. 그렇지 않으면 결과가 잘못됩니다.
cmdtest("ReturnValue") = 1인 경우 그러면
응답."이 직원이 있습니다"라고 쓰세요.
또 다른
응답."해당 직원 없음"이라고 작성하세요.
종료 조건
Cnn.닫기
prmTest = 없음으로 설정
cmdTest = 없음 설정: Cnn = 없음 설정
%>
3. 빅데이터 처리 방법 여기서 말하는 '빅데이터'란 주로 위에서 설명한 방법으로는 제대로 데이터를 얻을 수 없는 텍스트(큰 텍스트), 이미지(이미지) 분야를 말한다. 먼저 Size = rsTest(0).ActualSize를 사용하여 필드 값의 실제 길이를 가져온 다음 rsTest(0).GetChunk(Size)를 사용하여 데이터를 가져와야 합니다. 실제 사용에서는 이러한 필드가 상대적으로 크기 때문에 서버 자원을 절약하고 합리적으로 사용하기 위해 분할 읽기가 일반적으로 채택됩니다. 예 wuf74.asp:
<% @LANGUAGE = VBScript %>
<!--#include 파일="AdoSQL7.asp"-->
<!--#include 파일="adovbs.inc"-->
<% ' wuf74.asp
희미한 StrSQL, rsTest
'pr_info는 텍스트 필드입니다.
StrSQL = "pub_info에서 pr_info,pub_id 선택"
rsTest = Cnn.Execute(StrSQL) 설정
희미한 BasicSize, BeginSize, LText
rsTest.EOF가 아닌 동안 수행
Response.Write rsTest(1) & "<br>"
'매번 1024바이트를 읽습니다.
기본크기 = 1024
시작 크기 = 0
BeginSize < rsTest(0).ActualSize 동안
LText = rsTest(0).GetChunk(BasicSize)
BeginSize = BeginSize + 기본 크기
'세그먼트별로 클라이언트에 출력
응답.LText 쓰기
향하게 하다
응답."<br><br>" 쓰기
rsTest.MoveNext
고리
Cnn.닫기
rsTest = 없음 설정: Cnn = 없음 설정
%>
이 예에서는 매번 최대 1024바이트를 읽으며 데이터를 여러 번 읽습니다. 반대로 데이터베이스에 빅데이터를 쓰는 경우 방법은 위와 유사하지만 GetChunk 메서드를 사용하는 대신 AppendChunk 메서드를 사용합니다.
rsTest(0).AppendChunkLtext
참고: 마지막으로 SQL Server 데이터베이스에 대한 약간의 요령을 소개하겠습니다. 데이터베이스의 중국어 데이터가 잘못된 문자로 표시되는 상황이 발생하면 당황하지 마십시오. 내 사이트로 이동하여 sqlsrv32.dll을 다운로드하고 "C:WindowsSystem" 아래에 같은 이름의 파일을 덮어쓰기만 하면 됩니다. 문제의 원인은 일반적으로 Windows 98 Second Edition(SQL Server 드라이버 버전 번호 3.70.06.23) 또는 Windows 2000에서 또는 MDAC2.5(버전 번호 3.70.08.20)가 설치된 경우 발생하는 SQL Server 드라이버입니다. .