ASP เป็นเครื่องมือที่ทรงพลังสำหรับการสร้างหน้าเว็บแบบโต้ตอบแบบไดนามิก ด้านล่างนี้เป็นบทช่วยสอนเกี่ยวกับการใช้ที่เก็บข้อมูล ASP ที่ตัวแก้ไขได้แชร์กับคุณ เพื่อนที่สนใจมาเรียนรู้เกี่ยวกับมันกับบรรณาธิการ!
1. พารามิเตอร์ผ่านโดยใช้วัตถุคำสั่งและวัตถุพารามิเตอร์ การบรรยายครั้งนี้ส่วนใหญ่จะใช้ฐานข้อมูล Microsoft SQL Server 7.0 ขั้นแรกให้สร้างไฟล์การเชื่อมต่อ ADOSQL7.ASP สำหรับการสำรองข้อมูล ฉันจะไม่ระบุเมื่อมีการใช้งานในภายหลัง
%'' adosql7.asp
ตัวเลือก Explicit
Response.exext = 0
'' ส่วนที่ 1: การสร้างการเชื่อมต่อ
dimcnn, strcnn
setcnn = server.createObject ("adodb.connection"))
strcnn = "ผู้ให้บริการ = sqloledb; userid = sa; รหัสผ่าน =; initialCatalog = pubs; dataSource = icbczjp"
cnn.openstrcnn
-
หมายเหตุ: เมื่อใช้เองให้ตั้งค่าแหล่งข้อมูลเป็นชื่อเครื่องของเซิร์ฟเวอร์ฐานข้อมูลของคุณ
นอกจากนี้เมื่อใช้ฐานข้อมูลการเข้าถึงในอดีต Microsoft Access97 สามารถดูฟิลด์และข้อมูลได้อย่างง่ายดาย เมื่อใช้ฐานข้อมูล SQLServer โดยเฉพาะอย่างยิ่งเมื่อทำการดีบักสคริปต์ ASP บนเครื่องอื่นคุณต้องติดตั้งเครื่องมือเพิ่มเติมเพื่อดูฟิลด์และข้อมูล ที่นี่เราให้บริการเครื่องมือ: msqry32.exe (MicrosoftQuery) ไฟล์นี้ติดตั้งด้วย Office97 และโดยทั่วไปจะอยู่ในไดเรกทอรี "Microsoft Office/Office"
ตัวอย่าง wuf70.asp:
%@language = "vbscript"%>
!-#includit file = "adosql7.asp"->
!-#include file = "adovbs.inc"->
%'' wuf70.asp
dimcmdtest, prmtest, มากที่สุด
'' สร้างวัตถุคำสั่ง
SetCmdTest = Server.CreateObject ("ADODB.COMMAND"))
'วัตถุบันทึกและคำสั่งสามารถเชื่อมต่อกับวัตถุการเชื่อมต่อผ่านคุณสมบัติ ActivEconnection
cmdtest.activeConnection = cnn
'' คำสั่ง SQL - มีสองพารามิเตอร์แสดงด้วย?
cmdtest.CommandText = "UpdateJobSsetJob_Desc =? wherejob_id =?"
'' สมมติว่าประเภทคำสั่งคือคำสั่ง SQL
cmdtest.CommandType = adcmdText
'' คุณสมบัติที่เตรียมไว้กำหนดว่าจะรวบรวมคำสั่ง SQL ก่อนตั้งค่าเป็นจริงเพื่อเพิ่มความเร็วในการรัน
cmdtest.prepared = true
'' สร้างวัตถุพารามิเตอร์
setPrmTest = cmdtest.createparameter ("job_desc", advarchar, adparaminput, 50, "เครือข่าย")
'' ผนวกข้อมูลไปยังการรวบรวมข้อมูลพารามิเตอร์
cmdtest.parameters.appendprmtest
setPrmTest = cmdtest.createparameter ("job_id", Adsmallint, adparaminput ,, "12")
cmdtest.parameters.appendprmtest
'' ดำเนินการแก้ไข - ไม่จำเป็นต้องส่งคืนผลลัพธ์เพียงแค่ใช้ cmdtest.execute
cmdtest.execute
'' รีเซ็ตพารามิเตอร์ที่จะเรียกใช้ - คุณสามารถแก้ไขข้อมูลอีกชิ้นหนึ่ง
cmdtest.parameters ("job_id") = "1"
cmdtest.parameters ("job_desc") = "ทดสอบ"
cmdtest.execute
'' รีเซ็ตพารามิเตอร์เพื่อเรียกใช้
cmdtest ("job_id") = "14"
cmdtest ("job_desc") = "การเงิน"
cmdtest.execute
setRstest = cnn.execute ("selectjob_id, job_descfromjobs"))
whilenotrstest.eof
Response.writerstest (0) & Rstest (1) & ""
rstest.movenext
ใช้
cnn.close: setprmtest = ไม่มีอะไร
setCmdTest = ไม่มีอะไร: setcnn = ไม่มีอะไร
-
วิเคราะห์:
1. วิธี createParameter ของวัตถุคำสั่งใช้เพื่อสร้างวัตถุพารามิเตอร์สำหรับคำสั่ง SQL หรือขั้นตอนที่เก็บไว้ มีพารามิเตอร์ทั้งหมดห้าพารามิเตอร์ (พารามิเตอร์ห้าตัวเป็นทางเลือก):
พารามิเตอร์แรก: ชื่อของวัตถุพารามิเตอร์;
พารามิเตอร์ที่สอง: มีประเภทข้อมูลหลายประเภทของวัตถุพารามิเตอร์ โปรดดูความช่วยเหลือ ADO ที่นี่ Advarchar (ค่าสตริง), Adsmallint (จำนวนเต็ม 2-byte ที่ลงนาม);
พารามิเตอร์ที่สาม: ประเภทพารามิเตอร์ มันสามารถ: adparaminput (หมายถึงพารามิเตอร์อินพุต), adparamoutput (ระบุว่าเป็นพารามิเตอร์เอาต์พุต), adparamreturnValue (ระบุว่าเป็นค่าที่ส่งคืน), adparamunknown (ระบุว่าชนิดพารามิเตอร์ไม่สามารถกำหนดได้)
พารามิเตอร์ที่สี่: ความยาวข้อมูลของพารามิเตอร์นั้นควรระบุไว้ให้เท่ากับความยาวของฟิลด์ที่สอดคล้องกันในฐานข้อมูลเพื่อหลีกเลี่ยงข้อผิดพลาดระหว่างการใช้งาน โดยเฉพาะอย่างยิ่งเมื่อชนิดข้อมูลเป็น VARCHAR หากเป็นจำนวนเต็มหรือประเภทวันที่ค่าไม่จำเป็น
พารามิเตอร์ที่ห้า: ค่าเริ่มต้นของการตั้งค่าพารามิเตอร์
2.CMDTEST.PARAMETERS.APPEND วิธีการเพิ่มวัตถุพารามิเตอร์ในการรวบรวมข้อมูลพารามิเตอร์ จากตัวอย่างนี้คุณสามารถดูวิธีการใช้พารามิเตอร์หลายตัว
3. จากตัวอย่างนี้เราจะเห็นว่าคุณจะต้องรีเซ็ตพารามิเตอร์อินพุตเพื่อดำเนินการแก้ไขข้อมูลอื่น ๆ ซึ่งสะดวกมาก แนวคิดนี้ยังเป็นหนึ่งในวิธีการที่ใช้กันมากที่สุดในการเขียนโปรแกรม
4. รีเซ็ตพารามิเตอร์คุณสามารถใช้ cmdtest.parameters หรือละเว้นเป็น cmdtest ("job_id")
2. ใช้ขั้นตอนที่เก็บไว้ใน ASP
ขั้นตอนที่เก็บไว้คืออะไร (ขั้นตอนที่เก็บไว้อยู่ในเซิร์ฟเวอร์ฐานข้อมูลและเป็นชุดของคำสั่ง SQL ที่สามารถมีคำสั่ง SQL หนึ่งคำหรือมากกว่า) และวิธีการสร้างขั้นตอนที่เก็บไว้ไม่ได้อยู่ในเนื้อหาของการบรรยายนี้ การบรรยายนี้ส่วนใหญ่แสดงให้เห็นถึงวิธีการเรียกขั้นตอนที่เก็บไว้ใน ASP
ประโยชน์ของการใช้ขั้นตอนที่เก็บไว้นั้นยอดเยี่ยมซึ่งมีประสิทธิภาพมากกว่าการใช้คำสั่ง SQL ในสคริปต์ ASP พวกเขาสามารถปรับปรุงประสิทธิภาพโดยรวมและลดการโหลดเครือข่าย (ลดการโต้ตอบระหว่างเซิร์ฟเวอร์เครือข่ายและเซิร์ฟเวอร์ข้อมูล) พวกเขาสามารถเพิ่มประสิทธิภาพรหัส ASP และเพิ่มความยืดหยุ่นของรหัสและอื่น ๆ
(i) ใช้พารามิเตอร์อินพุตในขั้นตอนที่เก็บไว้
ขั้นตอนที่เก็บไว้ในตัวอย่างนี้คือ "byroyalty" ที่มาพร้อมกับ SQLServer 7.0 คำสั่ง SQL ภายในนั้นง่ายมาก ไม่มีอะไรมากไปกว่า CreateProcedureByroyalty เพิ่มเติมและพารามิเตอร์อินพุตคือ @percentage:
createProcedureByroyalty@percentageint
เช่น
selectau_idfromtitleauthor
wheretitleauthor.royaltypeper=@percentage
Servebywww.cidu.net
ตัวอย่าง wuf71.asp
%@language = vbscript%>
!-#includit file = "adosql7.asp"->
!-#include file = "adovbs.inc"->
%'' wuf71.asp
dimcmdtest, prmtest, มากที่สุด
SetCmdTest = Server.CreateObject ("ADODB.COMMAND"))
cmdtest.CommandText = "byroyalty" '' ชื่อขั้นตอนที่เก็บไว้
'' สมมติว่าประเภทคำสั่งเป็นขั้นตอนที่เก็บไว้
cmdtest.CommandType = ADCMDSTORDPROC
'' สร้างวัตถุพารามิเตอร์
setPrmTest = server.createObject ("adoDB.Parameter"))
'แอตทริบิวต์ประเภทสอดคล้องกับพารามิเตอร์ที่สองใน wuf70.asp
prmtest.type = adinteger''4-byte signed integer
'คุณสมบัติทิศทางสอดคล้องกับพารามิเตอร์ที่สามใน wuf70.asp
prmtest.direction = adparaminput
'แอตทริบิวต์ค่าสอดคล้องกับพารามิเตอร์ที่ห้าใน wuf70.asp
prmtest.value = 30
cmdtest.parameters.appendprmtest
setCmdTest.ActiveConnection = cnn
'คุณต้องส่งคืนชุดระเบียนดังนั้นใช้ setRstest = cmdTest.execute
setRstest = cmdtest.execute
whilenotrstest.eof
Response.writerstest (0) & ""
rstest.movenext
ใช้
cnn.close
setRstest = ไม่มีอะไร: setPrMTest = ไม่มีอะไร
setCmdTest = ไม่มีอะไร: setcnn = ไม่มีอะไร
-
คุณสมบัติ CommandText สามารถระบุคำสั่ง SQL หรือตามขั้นตอนที่เก็บไว้หรือชื่อตาราง
ในตัวอย่างนี้การสร้างวัตถุพารามิเตอร์แตกต่างจาก wuf70.asp เล็กน้อย ในความเป็นจริงถ้าคุณมองอย่างใกล้ชิดความหมายจะคล้ายกัน มีสองคุณสมบัติในตัวอย่างนี้ที่ไม่ได้ใช้: prmtest.name, prmtest.size, plus type, ทิศทางและค่าซึ่งสอดคล้องกับพารามิเตอร์ทั้งห้าใน wuf70.asp
(ii) ใช้พารามิเตอร์เอาต์พุต
เมื่อได้รับบันทึกจากตารางฐานข้อมูลหรือการคำนวณค่าขั้นตอนที่เก็บไว้ซึ่งจะต้องใช้พารามิเตอร์เอาต์พุต เพื่อให้ตัวอย่างก่อนสร้างการจัดสรรขั้นตอนใหม่ที่จัดเก็บใหม่ในห้องสมุด SQLServer Pubs ขั้นตอนที่เก็บไว้จะต้องป้อนสองวันจากนั้นส่งออกค่าสูงสุด
CreateProcedureOutEmploy
-
@job_lvltinyintoutput,
@hire_date1datetime
@hire_date2datetime
-
เช่น
เลือก@job_lvl = สูงสุด (job_lvl) fromimployee
wherehire_date> =@hire_date1andhire_date =@hire_date2
มีหลายวิธีในการสร้างขั้นตอนที่เก็บไว้:
1. ใช้ enterprisemanager ของ Microsoft SQLServer เปิดในไดเรกทอรีต้นไม้ทางด้านซ้ายและเปิดในทางกลับกัน: Consoleroot - Microsoftsqlservers - SQLServerGroup - ICBCZJP หลังจากเข้าสู่ขั้นตอนที่เก็บไว้แล้วยังสามารถตรวจพบไวยากรณ์ได้
2. ใช้ QueryAnalyzer ของ Microsoft SQLServer ให้เชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลก่อนและเลือกฐานข้อมูล Pubs ป้อนขั้นตอนที่เก็บไว้ด้านบนและคลิก ExecuteQuery (หรือกด F5);
3. การใช้ VB6.0 หลังจากเปิดเมนู "ดู"/"หน้าต่างดูข้อมูล" คลิกขวา "ลิงก์ข้อมูล"/"ลิงก์ข้อมูลใหม่";
4. ใช้สคริปต์ ASP เพื่อสร้างขั้นตอนที่เก็บไว้เช่น WUF75.asp:
%@language = vbscript%>
!-#includit file = "adosql7.asp"->
!-#include file = "adovbs.inc"->
%'' wuf75.asp
dimstrsql
'' หมายเหตุ: & Chr (10) & Chr (13) สามารถละเว้นได้ส่วนใหญ่เป็นรูปลักษณ์ที่ดี
strsql = "createprocedureoutemploy (@job_lvltinyintoutput," & Chr (10) & Chr (13) & _
"@hire_date1dateTime,@hire_date2dateTime) เป็น" & chr (10) & chr (13) & _
"เลือก@job_lvl = สูงสุด (job_lvl) fromimployee" & _
"Wherehire_date> =@hire_date1andhire_date =@hire_date2"
cnn.executestrsql
Response.write "สร้างขั้นตอนที่เก็บไว้สำเร็จ"
cnn.close: setcnn = ไม่มีอะไร
-
หลังจากสร้างขั้นตอนที่เก็บไว้นอกเหนือจากการใช้เมนูแล้วคุณยังสามารถลบได้โดยใช้คำสั่ง SQL
ตัวอย่าง wuf72.asp - ส่งพารามิเตอร์อินพุตที่ต้องการไปยังขั้นตอนที่เก็บไว้และรับผลลัพธ์ผลลัพธ์
%@language = vbscript%>
!-#includit file = "adosql7.asp"->
!-#include file = "adovbs.inc"->
%'' wuf72.asp
dimcmdtest, prmtest
SetCmdTest = Server.CreateObject ("ADODB.COMMAND"))
cmdtest.activeConnection = cnn
cmdtest.CommandText = "outemploy" '' ชื่อขั้นตอนที่เก็บไว้
cmdtest.CommandType = ADCMDSTORDPROC
'' สร้างวัตถุพารามิเตอร์
setPrmTest = cmdtest.createparameter ("job_lvl", adtinyint, adparamoutput)
cmdtest.parameters.appendprmtest
'' Adtinyint-1 ไบต์ลงนามจำนวนเต็ม
'' ค่า addbdate-Date (yyyymmdd)
setPrmTest = cmdTest.createparameter ("Hiredate1", addbdate, adparaminput ,, "1993-05-09"
cmdtest.parameters.appendprmtest
setPrmTest = cmdTest.CreateParameter ("Hiredate2", addBdate, adparaminput ,, "1994-02-01")))
cmdtest.parameters.appendprmtest
cmdtest.execute
'การแสดงออกทั้งสามต่อไปนี้มีความหมายเหมือนกัน
Response.writecmdtest ("job_lvl") & ""
Response.writecmdtest.parameters ("Job_lvl") & ""
Response.writecmdtest.parameters ("job_lvl") ค่า
cnn.close
setPrmTest = ไม่มีอะไร
setCmdTest = ไม่มีอะไร: setcnn = ไม่มีอะไร
-
(iii) ใช้พารามิเตอร์รหัสส่งคืน
ใช้คำสั่ง Return เพื่อส่งคืนรหัสส่งคืนที่แตกต่างจากขั้นตอนที่เก็บไว้ ตัวอย่างเช่นขั้นตอนที่เก็บไว้ก่อนจะได้รับชุดระเบียนก่อนจากนั้นหากมีพนักงานชื่อมาร์กาเร็ตมันจะกลับมา 1 มิฉะนั้นจะส่งคืน 0
CreateProcedurereturnemploy
เช่น
selectemp_id, fnamefrommployee
Ifexists (SelectFnameFromimployeeWhereFname = '' Margaret '')
กลับมา (1)
อื่น
return (0)
ตัวอย่าง wuf73.asp
%@language = vbscript%>
!-#includit file = "adosql7.asp"->
!-#include file = "adovbs.inc"->
%'' wuf73.asp
dimcmdtest, prmtest, มากที่สุด
SetCmdTest = Server.CreateObject ("ADODB.COMMAND"))
cmdtest.activeConnection = cnn
cmdtest.CommandText = "returnEmploy" '' ชื่อขั้นตอนที่เก็บไว้
cmdtest.CommandType = ADCMDSTORDPROC
setPrmTest = cmdtest.createparameter ("returnValue", Adinteger, adparamreturnValue)
cmdtest.parameters.appendprmtest
setRstest = cmdtest.execute ()
whilenotrstest.eof
Response.writerstest (0) & "] [" & Rstest (1) & ""
rstest.movenext
ใช้
rstest.close: setRstest = ไม่มีอะไร
'' ก่อนที่จะส่งคืน cmdtest ("returnValue"), มากที่สุดจะต้องปิดก่อนมิฉะนั้นผลลัพธ์จะไม่ถูกต้อง
ifcmdtest ("returnValue") = 1 จากนั้น
Response.write "มีพนักงานคนนี้"
อื่น
Response.write "ไม่มีพนักงาน"
endif
cnn.close
setPrmTest = ไม่มีอะไร
setCmdTest = ไม่มีอะไร: setcnn = ไม่มีอะไร
-
3. วิธีจัดการกับข้อมูลขนาดใหญ่
"ข้อมูลขนาดใหญ่" ที่นี่ส่วนใหญ่หมายถึงข้อความ (ข้อความขนาดใหญ่) และฟิลด์รูปภาพ (ภาพ) ข้อมูลไม่สามารถรับได้อย่างถูกต้องโดยใช้วิธีการที่อธิบายไว้ข้างต้น คุณต้องใช้ Size = RSTEST (0) .ActualSize ก่อนเพื่อรับความยาวจริงของค่าฟิลด์จากนั้นใช้ RSTEST (0) .getChunk (ขนาด) เพื่อรับข้อมูล ในการใช้งานจริงเนื่องจากฟิลด์เหล่านี้มีขนาดค่อนข้างใหญ่เพื่อบันทึกและใช้ทรัพยากรเซิร์ฟเวอร์อย่างสมเหตุสมผลการอ่านแบบแบ่งส่วนจะถูกนำมาใช้โดยทั่วไป ตัวอย่าง wuf74.asp:
%@language = vbscript%>
!-#includit file = "adosql7.asp"->
!-#include file = "adovbs.inc"->
%'' wuf74.asp
dimstrsql, ครั้งยิ่งใหญ่ที่สุด
'pr_info เป็นฟิลด์ข้อความ
strsql = "selectpr_info, pub_idfrompub_info"
setRstest = cnn.execute (strsql)
dimbasicsize, เริ่มต้น, ltext
dowhilenotrstest.eof
Response.writerstest (1) & ""
'1024 ไบต์ต่อการอ่าน
Basicsize = 1024
เริ่มต้น = 0
ในขณะที่ beginsizerstest (0) .actualsize
ltext = rstest (0) .getChunk (basicsize)
เริ่มต้น = เริ่มต้น+พื้นฐาน
'ส่วนเอาต์พุตตามเซ็กเมนต์ไปยังไคลเอนต์
Response.writeLtext
ใช้
Response.write ""
rstest.movenext
วง
cnn.close
setRstest = ไม่มีอะไร: setcnn = ไม่มีอะไร
-
ในตัวอย่างนี้จะอ่านได้สูงสุด 1024 ไบต์ในแต่ละครั้งและอ่านได้หลายครั้ง ในทางตรงกันข้ามถ้าคุณเขียนข้อมูลขนาดใหญ่ไปยังฐานข้อมูลวิธีนี้จะคล้ายกับข้างต้น แต่แทนที่จะใช้วิธี getChunk คุณใช้วิธี AppendChunk:
Rstest (0) .appendchunkltext
หมายเหตุ: ในที่สุดฉันจะแนะนำเคล็ดลับเล็กน้อยเกี่ยวกับฐานข้อมูล SQLServer หากคุณพบสถานการณ์นี้: ข้อมูลภาษาจีนในฐานข้อมูลจะแสดงในรหัสที่อ่านไม่ออกโปรดอย่าตกใจ คุณเพียงแค่ต้องไปที่เว็บไซต์ของฉันเพื่อดาวน์โหลด SQLSRV32.dll เขียนทับไฟล์ด้วยชื่อเดียวกันภายใต้ "C:/Windows/System" แหล่งที่มาของปัญหาคือไดรเวอร์ SQLServer ซึ่งโดยทั่วไปจะเกิดขึ้นใน Windows 98 เวอร์ชัน 2 (หมายเลขเวอร์ชันของไดรเวอร์ SQLServer คือ 3.70.06.23) หรือ Windows 2000 หรือ MDAC2.5 (หมายเลขเวอร์ชันคือ 3.70.08.20)
ข้างต้นเป็นบทช่วยสอนเกี่ยวกับการใช้ที่เก็บ ASP ฉันเชื่อว่าคุณได้เรียนรู้ทั้งหมด สำหรับเนื้อหาที่เกี่ยวข้องเพิ่มเติมโปรดติดตามช่องทางเทคโนโลยี Wonew