Ada banyak artikel tentang ASP dan prosedur tersimpan (Stored Procedures), namun saya ragu apakah penulis benar-benar mempraktikkannya. Ketika saya masih pemula, saya berkonsultasi dengan banyak informasi yang relevan dan menemukan bahwa banyak metode yang diberikan tidak sama dalam praktiknya. Untuk aplikasi sederhana, materi ini mungkin berguna, tetapi terbatas pada hal ini, karena pada dasarnya sama dan menyalin satu sama lain untuk aplikasi yang sedikit lebih rumit, semuanya tidak jelas.
Sekarang, saya pada dasarnya mengakses SQL Server dengan memanggil prosedur tersimpan. Teks berikut adalah ringkasan praktiknya. Saya harap ini dapat bermanfaat bagi semua orang.
Prosedur tersimpan adalah satu atau lebih perintah SQL yang disimpan dalam database sebagai objek yang dapat dieksekusi.
Definisi selalu abstrak. Prosedur tersimpan sebenarnya adalah sekumpulan pernyataan SQL yang dapat menyelesaikan operasi tertentu, tetapi kumpulan pernyataan ini ditempatkan di database (di sini kita hanya berbicara tentang SQL Server). Jika kita membuat prosedur tersimpan dan memanggil prosedur tersimpan di ASP, kita dapat menghindari pencampuran pernyataan SQL dengan kode ASP. Setidaknya ada tiga manfaat melakukan hal ini:
Pertama, meningkatkan efisiensi secara signifikan. Kecepatan eksekusi prosedur tersimpan itu sendiri sangat cepat, dan pemanggilan prosedur tersimpan dapat sangat mengurangi jumlah interaksi dengan database.
Kedua, meningkatkan keamanan. Jika Anda mencampur pernyataan SQL dalam kode ASP, setelah kode disusupi, itu juga berarti struktur perpustakaan disusupi.
Ketiga, ini kondusif untuk penggunaan kembali pernyataan SQL.
Di ASP, prosedur tersimpan umumnya dipanggil melalui objek perintah. Tergantung pada situasinya, artikel ini juga memperkenalkan metode pemanggilan lainnya. Untuk memudahkan penjelasan, klasifikasi sederhana berikut dibuat berdasarkan input dan output dari prosedur tersimpan:
1. Prosedur tersimpan yang hanya mengembalikan satu kumpulan catatan
mengasumsikan prosedur tersimpan berikut (tujuan artikel ini bukan untuk menjelaskan Sintaks T-SQL, jadi prosedur tersimpan hanya memberikan kode, tidak ada penjelasan):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
start
select * from dbo.[userinfo]
end
go
Prosedur tersimpan di atas memperoleh semua catatan di tabel info pengguna dan mengembalikan kumpulan catatan. Kode ASP untuk memanggil prosedur tersimpan melalui objek perintah adalah sebagai berikut:
'**Memanggil prosedur tersimpan melalui objek Perintah**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr adalah koneksi database String
MyComm.CommandText = "getUserList" 'Tentukan nama prosedur tersimpan
MyComm.CommandType = 4 'Tunjukkan bahwa ini adalah prosedur tersimpan
MyComm.Prepared = true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu
Setel MyRst = MyComm.Execute
Set MyComm = Tidak ada
prosedur tersimpan Kumpulan rekaman yang diperoleh ditugaskan ke MyRst. Selanjutnya, MyRst dapat dioperasikan.
Pada kode di atas, atribut CommandType menunjukkan jenis permintaan. Nilai dan deskripsinya adalah sebagai berikut:
-1 menunjukkan bahwa jenis parameter CommandText tidak dapat ditentukan
1 menunjukkan bahwa parameter CommandText adalah perintah umum tipe
2 menunjukkan bahwa Parameter CommandText adalah nama tabel yang ada
4 menunjukkan bahwa parameter CommandText adalah Nama prosedur tersimpan
juga dapat memanggil prosedur tersimpan melalui objek Connection atau objek Recordset. Metodenya adalah sebagai berikut:
'**Panggil prosedur tersimpan melalui Connection objek**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn .open MyConStr 'MyConStr adalah string koneksi database
Set MyRst = MyConn.Execute("getUserList",0,4) 'Parameter terakhir memiliki arti yang sama dengan CommandType
Set MyConn = Nothing
'**Memanggil prosedur tersimpan melalui objek Recordset**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1 ,4
'MyConStr adalah string koneksi database, parameter terakhir memiliki arti yang sama dengan CommandType
2. Tidak ada penyimpanan input dan output Silakan lihat prosedur tersimpan berikut untuk prosesnya
:
/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
start
delete from dbo.[userinfo]
end
go
Prosedur tersimpan ini menghapus semua record di tabel userinfo tanpa input atau output apa pun. Call Metodenya pada dasarnya sama seperti yang disebutkan di atas, hanya saja tidak perlu mendapatkan kumpulan record :
'**Panggil prosedur tersimpan melalui objek Command**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database
MyComm.CommandText = "delUserAll" 'Tentukan nama prosedur tersimpan
MyComm.CommandType = 4 'Tunjukkan bahwa ini adalah prosedur tersimpan
MyComm.Prepared = true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu
MyComm.Execute 'Tidak perlu mendapatkan kumpulan catatan di sini
Set MyComm = Tidak Ada
Tentu saja, prosedur tersimpan seperti itu juga dapat dipanggil melalui objek Connection atau objek Recordset, tetapi objek Recordset dibuat untuk mendapatkan recordset. Jika recordset tidak dikembalikan, lebih baik menggunakan objek Command.
3.Saat melakukan operasi yang mirip dengan SP2,
prosedur tersimpan dengan nilai pengembalian
harus memanfaatkan sepenuhnya kemampuan pemrosesan transaksi SQL Server yang kuat untuk menjaga konsistensi data.Selain itu, kita mungkin memerlukan prosedur tersimpan untuk mengembalikan status eksekusi. Untuk tujuan ini, ubah SP2 sebagai berikut:
/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
start
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF error= 0
mulai
COMMIT TRANSACTION
return 1
end
ELSE
start
ROLLBACK TRANSACTION
return 0
end
return
end
go
Prosedur tersimpan di atas mengembalikan 1 ketika penghapusan berhasil dijalankan, jika tidak maka akan mengembalikan 0 dan melakukan operasi rollback. Untuk mendapatkan nilai kembalian di ASP, Anda perlu menggunakan koleksi Parameter untuk mendeklarasikan parameter:
'**Panggil prosedur tersimpan dengan nilai kembalian dan dapatkan nilai kembalian**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject ("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database
MyComm.CommandText = "delUserAll" 'Tentukan nama prosedur tersimpan
MyComm.CommandType = 4 'Menunjukkan bahwa ini adalah prosedur tersimpan
MyComm.Prepared = true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu
' pernyataan Nilai kembalian
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
MyComm.Execute
'Dapatkan nilai kembalian
DIM retValue
retValue = MyComm(0) ' atau retValue = MyComm.Parameters(0)
Set MyComm = Nothing
Pada MyComm.CreateParameter("RETURN",2,4), arti dari setiap parameter adalah sebagai berikut:
Parameter pertama ("RETURE") adalah nama parameter. Nama parameter dapat diatur secara sewenang-wenang, namun umumnya harus sama dengan nama parameter yang dideklarasikan dalam prosedur tersimpan. Berikut adalah nilai kembalian, yang biasanya saya setel ke "RETURE";
parameter kedua (2) menunjukkan tipe data parameter. Untuk kode tipe tertentu, silakan merujuk ke referensi ADO.
adBigInt: 20 ;
adBinary
: 128 ;
adInteger
: 3
;
adSmallInt
: 2 ;
adTinyInt
: 16
;
dapat diambil, dan -1 hingga - 99 adalah nilai yang dicadangkan;
parameter ketiga (4) menunjukkan sifat parameter, di mana 4 menunjukkan bahwa ini adalah nilai kembalian. Deskripsi nilai parameter ini adalah sebagai berikut:
0: Jenis tidak dapat ditentukan; 1: Parameter masukan; 2: Parameter masukan; 3: Parameter masukan atau keluaran; 4: Nilai kembalian
Kode ASP yang diberikan di atas harus disebutkan menjadi kode yang lengkap, juga Itu adalah kode yang paling kompleks. Faktanya,
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
dapat disederhanakan menjadi
MyComm.Parameters.Append MyComm.CreateParameter( "RETURN",2,4)
atau bahkan Anda dapat terus menyederhanakannya, yang akan dijelaskan nanti.
Untuk prosedur tersimpan yang memiliki parameter hanya bisa dipanggil menggunakan objek Command (ada juga informasi bisa dipanggil melalui objek Connection atau objek Recordset, tapi saya belum mencobanya).
4. Nilai kembalian dari prosedur tersimpan dengan parameter masukan dan parameter keluaran
sebenarnya merupakan parameter keluaran khusus. Dalam kebanyakan kasus, kami menggunakan prosedur tersimpan yang memiliki parameter input dan output. Misalnya, kami ingin mendapatkan nama pengguna dari pengguna dengan ID tertentu di tabel informasi pengguna. --ID pengguna. , dan parameter keluaran----nama pengguna. Prosedur tersimpan untuk mengimplementasikan fungsi ini adalah sebagai berikut:
/*SP4*/
CREATE PROCEDURE dbo.getUserName
@UserID int,
@UserName varchar(40) output
as
set nocount on
start
if @UserID is null return
select @UserName=username
from dbo .[ userinfo]
di mana userid=@UserID
return
end
go
Kode ASP untuk memanggil prosedur tersimpan adalah sebagai berikut:
'**Panggil prosedur tersimpan dengan parameter input dan output**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject(" ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database
MyComm.CommandText = "getUserName" 'Tentukan nama prosedur tersimpan
MyComm.CommandType = 4 'Menunjukkan bahwa ini adalah prosedur tersimpan
MyComm. Prepared = true 'Memerlukan SQL Kompilasi perintah terlebih dahulu
dan deklarasikan parameter
MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)
MyComm.Parameters.append MyComm.CreateParameter("@UserName", 200,2,40)
MyComm.Execute
'Dapatkan parameter
UserName = MyComm(1)
Setel MyComm = Nothing
Dalam kode di atas, Anda dapat melihat bahwa, tidak seperti mendeklarasikan nilai yang dikembalikan, 5 parameter diperlukan saat mendeklarasikan parameter input, dan 4 parameter diperlukan saat mendeklarasikan parameter keluaran. Saat mendeklarasikan parameter masukan, lima parameternya adalah: nama parameter, tipe data parameter, tipe parameter, panjang data, dan nilai parameter. Saat mendeklarasikan parameter keluaran, tidak ada parameter terakhir: nilai parameter.
Perhatian khusus harus diberikan pada: saat mendeklarasikan parameter, urutannya harus sama dengan yang ditentukan dalam prosedur tersimpan, dan tipe data serta panjang setiap parameter juga harus sama dengan yang ditentukan dalam prosedur tersimpan.
Jika prosedur tersimpan memiliki beberapa parameter, kode ASP akan tampak rumit. Anda dapat menggunakan perintah with untuk menyederhanakan kode:
'**Panggil prosedur tersimpan dengan parameter input dan output (kode yang disederhanakan)**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
dengan MyComm
.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database.CommandText
= "getUserName" 'Tentukan nama prosedur tersimpan.CommandType
= 4 'Menunjukkan bahwa ini adalah prosedur tersimpan.Prepared
= true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu.Parameters.append
.CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName",200, 2,40)
.Jalankan
diakhiri dengan
UserName = MyComm(1)
Set MyComm = Nothing
Jika kita ingin mendapatkan nama pengguna 10 pengguna dengan ID 1 sampai 10, apakah kita perlu membuat objek Command sebanyak 10 kali? TIDAK. Jika Anda perlu memanggil prosedur tersimpan yang sama beberapa kali, cukup ubah parameter input dan Anda akan mendapatkan keluaran berbeda:
'**Beberapa panggilan ke prosedur tersimpan yang sama**
DIM MyComm,UserID,UserName
UserName = ""
Setel MyComm = Server .CreateObject( "ADODB.Command")
untuk UserID = 1 hingga 10
dengan MyComm
.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database.CommandText
= "getUserName" 'Tentukan nama prosedur tersimpan.CommandType
= 4 'Menunjukkan bahwa ini adalah prosedur tersimpan.Siap
= true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu
jika UserID = 1 lalu
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName" ,200,2,40 )
.Execute
else
'Tetapkan kembali parameter input (parameter input dan parameter output yang nilai parameternya tidak berubah saat ini tidak perlu dideklarasikan ulang)
.Parameters("@UserID") = UserID
.Jalankan
akhir jika
diakhiri dengan
Nama Pengguna = Nama Pengguna + MyComm( 1) + "," 'Mungkin Anda ingin menggunakan array untuk menyimpan
selanjutnya
Set MyComm = Tidak
Ada berulang kali, Anda hanya perlu menetapkan ulang parameter input yang nilainya telah berubah. Metode ini adalah Ketika ada beberapa parameter input dan output, dan nilai hanya satu parameter input berubah setiap kali dipanggil, jumlah kode dapat diubah. sangat berkurang.
5. Prosedur tersimpan yang memiliki nilai kembalian, parameter masukan, dan parameter keluaran pada saat yang sama. Seperti
disebutkan sebelumnya, saat memanggil prosedur tersimpan, urutan deklarasi parameter harus sama dengan urutan yang ditentukan dalam prosedur tersimpan. . Hal lain yang perlu diperhatikan secara khusus: jika prosedur tersimpan memiliki nilai kembalian serta parameter input dan output, nilai kembalian harus dideklarasikan terlebih dahulu.
Untuk mendemonstrasikan metode pemanggilan dalam kasus ini, mari kita perbaiki contoh di atas. Tetap mendapatkan nama pengguna dari pengguna dengan ID 1, tetapi kemungkinan pengguna tersebut tidak ada (pengguna telah dihapus, dan userid adalah kolom yang bertambah sendiri). Prosedur tersimpan mengembalikan nilai yang berbeda tergantung pada apakah pengguna ada atau tidak. Saat ini, prosedur tersimpan dan kode ASP adalah sebagai berikut:
/*SP5*/
CREATE PROCEDURE dbo.getUserName
--Untuk memperdalam kesan "urutan", balikkan urutan definisi dari dua parameter berikut
@UserName varchar( 40) keluaran,
@UserID int
sebagai
set nocount pada
awal
jika @UserID adalah null return
select @UserName=nama pengguna
dari dbo.[userinfo]
di mana userid=@UserID
if rowcount> 0
return 1
else
return 0
return
end
go
'**The panggilan memiliki nilai kembalian dan masukan Prosedur tersimpan untuk parameter dan parameter keluaran**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
dengan MyComm
.ActiveConnection = MyConStr 'MyConStr adalah koneksi database string.CommandText
= "getUserName" 'Tentukan nama prosedur tersimpan.CommandType
= 4 'Menunjukkan bahwa ini adalah prosedur tersimpan
. Prepared = true 'Membutuhkan perintah SQL untuk dikompilasi terlebih dahulu
' Nilai yang dikembalikan harus dideklarasikan terlebih dahulu.Parameter.Tambahkan
.CreateParameter("RETURN",2,4)
'Urutan deklarasi dua parameter berikut juga dibalik.Parameters.append
.CreateParameter("@UserName",200,2,40)
.Parameters.append .CreateParameter(" @UserID",3,1,4,UserID)
. Jalankan
diakhiri dengan
if MyComm(0) = 1 lalu
UserName = MyComm(1)
else
UserName = "Pengguna ini tidak ada"
diakhiri jika
Set MyComm = Nothing
6. Prosedur tersimpan yang mengembalikan parameter dan kumpulan rekaman pada saat yang sama
Terkadang, kita memerlukan prosedur tersimpan Mengembalikan parameter dan kumpulan rekaman pada saat yang sama, misalnya, saat menggunakan prosedur tersimpan untuk paging, parameter seperti kumpulan rekaman dan total volume data harus dikembalikan pada saat yang sama waktu. Berikut ini adalah prosedur tersimpan untuk pemrosesan paging:
/*SP6*/
CREATE PROCEDURE dbo.getUserList
@iPageCount int OUTPUT, --Jumlah total halaman
@iPage int, --Nomor halaman saat ini
@iPageSize int --Jumlah catatan per halaman
sebagai
set nocount pada
awal
--Buat tabel sementara
buat tabel #t (ID int IDENTITAS, --Penambahan otomatis kolom
userid int,
nama pengguna varchar(40))
--Tulis data ke dalam tabel sementara
masukkan ke #t
pilih userid, nama pengguna dari dbo.[UserInfo]
diurutkan berdasarkan userid
--Dapatkan jumlah total catatan
, deklarasikan @iRecordCount int
set @iRecordCount = jumlah baris
--Tentukan jumlah total halaman
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@ iRecordCount/@iPageSize)
ELSE
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
--Jika nomor halaman yang diminta lebih besar dari jumlah halaman total, tampilkan halaman terakhir
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
--Tentukan catatan awal dan akhir halaman saat ini
DECLARE @iStart int --start record
DECLARE @iEnd int --end record
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
--Dapatkan catatan halaman saat ini
pilih * dari #t di mana ID> @iStart dan ID <@iEnd
--Hapus tabel sementara
DROP TABLE #t
--Kembalikan jumlah total catatan
kembalikan @iRecordCount
end
goIn
the prosedur tersimpan di atas, masukkan nomor halaman saat ini dan jumlah catatan per halaman, dan kembalikan halaman saat ini Kumpulan catatan, jumlah total halaman dan jumlah total catatan. Untuk lebih umum, jumlah total catatan dikembalikan sebagai nilai kembalian. Berikut ini adalah kode ASP yang memanggil prosedur tersimpan (operasi paging spesifik dihilangkan):
'**Panggil prosedur tersimpan paging**
DIM pagenow,pagesize,pagecount,recordcount
DIM MyComm,MyRst
pagenow = Request("pn")
'Custom Fungsi ini digunakan untuk memverifikasi bilangan asli
jika CheckNar(pagenow) = false maka pagenow = 1
pagesize = 20
Set MyComm = Server.CreateObject("ADODB.Command")
dengan MyComm
.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database .CommandText
= "getUserList" 'Tentukan nama prosedur tersimpan.CommandType
= 4 'Menunjukkan bahwa ini adalah prosedur tersimpan
. Prepared = true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu
' Mengembalikan nilai (jumlah total catatan)
.Parameters.Append . CreateParameter("RETURN",2,4 )
'Parameter keluaran (jumlah halaman total)
.Parameters.Append .CreateParameter("@iPageCount",3,2)
'Parameter masukan (nomor halaman saat ini)
.Parameters.append .CreateParameter( "@iPage",3,1,4 ,pagenow)
'Parameter masukan (jumlah catatan per halaman)
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
Setel MyRst = .Execute
diakhiri dengan
if MyRst.state = 0 maka 'Tidak diperoleh Data, MyRst close
recordcount = -1
else
MyRst.close 'Catatan: Untuk mendapatkan nilai parameter, Anda harus menutup objek kumpulan catatan terlebih dahulu
recordcount = MyComm(0)
pagecount = MyComm( 1)
if cint(pagenow)> =cint(pagecount) lalu pagenow=pagecount
end if
Set MyComm = Nothing
'Berikut ini menampilkan record
jika recordcount = 0 lalu
Response.Tulis "No record"
elseif recordcount > 0 lalu
MyRst.open
do sampai MyRst.EOF
......
loop
'Berikut menampilkan Informasi paging
...
else 'recordcount=-1
Response.Tulis "Parameter error"
end if
Mengenai kode di atas, hanya ada satu poin yang perlu dijelaskan: saat mengembalikan kumpulan rekaman dan parameter pada saat yang sama, jika Anda ingin mendapatkan parameter, Anda harus menutup kumpulan rekaman terlebih dahulu, lalu membuka kumpulan rekaman saat menggunakannya.
7. Prosedur tersimpan yang mengembalikan beberapa kumpulan rekaman
Hal pertama yang diperkenalkan artikel ini adalah prosedur tersimpan yang mengembalikan kumpulan rekaman. Terkadang, prosedur tersimpan diperlukan untuk mengembalikan beberapa kumpulan rekaman di ASP, bagaimana cara mendapatkan kumpulan rekaman ini secara bersamaan? Untuk mengilustrasikan masalah ini, tambahkan dua field ke tabel userinfo: usertel dan usermail, dan atur agar hanya pengguna yang login yang dapat melihat kedua konten ini.
/*SP7*/
BUAT PROSEDUR dbo.getUserInfo
@userid int,
@checklogin bit
sebagai
set nocount pada
awal
jika @userid adalah null atau @checklogin adalah null kembali
pilih nama pengguna
dari dbo.[usrinfo]
di mana userid=@userid
--if Log di pengguna, dapatkan usertel dan usermail
jika @checklogin=1
pilih usertel,usermail
dari dbo.[userinfo]
di mana userid=@userid
return
end
goBerikut
ini adalah kode ASP:
'**Panggil prosedur tersimpan yang mengembalikan beberapa kumpulan catatan**
DIM checklg,UserID,UserName,UserTel,UserMail
DIM MyComm,MyRst
UserID = 1
'checklogin() adalah fungsi kustom untuk menentukan apakah pengunjung login
checklg = checklogin()
Set MyComm = Server.CreateObject("ADODB.Command" )
dengan MyComm
.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database.CommandText
= "getUserInfo" 'Tentukan nama prosedur tersimpan.CommandType
= 4 'Menunjukkan bahwa ini adalah prosedur tersimpan.Prepared
= true 'Membutuhkan perintah SQL untuk dikompilasi first.Parameters.append
.CreateParameter ("@userid",3,1,4,UserID)
.Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
Set MyRst = .Execute
end dengan
Set MyComm = Nothing
'Dari yang pertama Dapatkan nilai dari kumpulan data
UserName = MyRst(0)
'Dapatkan nilai dari kumpulan data kedua
jika bukan MyRst adalah Nothing maka
Set MyRst = MyRst.NextRecordset()
UserTel = MyRst(0)
UserMail = MyRst(1)
end if
Set MyRst = Nothing
Dalam kode di atas, metode NextRecordset dari objek Recordset digunakan untuk mendapatkan beberapa kumpulan rekaman yang dikembalikan oleh prosedur tersimpan.
Sejauh ini, artikel ini telah memberikan penjelasan yang relatif komprehensif tentang berbagai situasi di mana ASP memanggil prosedur tersimpan. Akhirnya, mari kita bicara tentang berbagai metode memanggil beberapa prosedur tersimpan dalam program ASP.
Dalam program ASP, dimungkinkan untuk memanggil beberapa prosedur tersimpan setidaknya dalam tiga cara berikut:
1. Membuat beberapa objek Perintah
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan satu
.. . ...
Set MyComm = Nothing
Set MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan dua
...
Set MyComm = Nothing
...
2. Buat hanya satu objek Command, Saat mengakhiri panggilan, kosongkan parameter
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan satu
...
' Hapus parameter (dengan asumsi ada tiga parameter)
MyComm.Parameters.delete 2
MyComm
. delete 0
'Panggil prosedur tersimpan dua dan hapus parameter
...
Setel MyComm = Tidak Ada
Saat ini, harap diperhatikan: urutan penghapusan parameter berlawanan dengan urutan deklarasi parameter. Alasannya adalah saya tidak tahu .
3. Gunakan metode Refresh pada pengumpulan data Parameter untuk mereset objek Parameter
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan satu
...
'Reset semua objek Parameter yang terdapat dalam kumpulan data Parameter
MyComm.Parameters.Refresh
'Panggil prosedur tersimpan 2
...
Setel MyComm = Tidak Ada
Secara umum diyakini bahwa membuat objek berulang kali adalah metode yang kurang efisien, tetapi setelah pengujian (alat pengujiannya adalah Microsoft Application Center Test), hasilnya tidak terduga:
Metode 2 > = Metode 1 >> Metode 3
Kecepatan lari Metode 2 lebih besar atau sama dengan Metode 1 (hingga sekitar 4% lebih tinggi). %), jadi disarankan untuk menggunakan metode 1 jika parameternya banyak;
Butuh satu hari bagi saya untuk akhirnya menuliskan beberapa pengalaman dangkal saya dalam memanggil prosedur tersimpan di ASP. Diantaranya, ada yang saya hanya tahu akibat tapi tidak tahu penyebabnya, dan ada pula yang mungkin salah, tapi ini semua melalui latihan pribadi saya. Mohon terima secara kritis, para pembaca. Jika Anda memiliki pendapat berbeda, harap beri tahu saya. Terima kasih sebelumnya.