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 meskipun teks berikut tidak dapat dijamin sepenuhnya benar, ini adalah ringkasan praktiknya.
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 proses tersimpan:
1. Prosedur tersimpan yang hanya mengembalikan satu kumpulan catatan mengasumsikan prosedur tersimpan berikut (tujuan artikel ini bukan untuk menjelaskan sintaks T-SQL, sehingga prosedur tersimpan hanya memberikan kode tanpa penjelasan):
/*SP1*/
BUAT PROSEDUR dbo.getUserList
sebagai
tetapkan tidak ada hitungan
mulai
pilih * dari dbo.[info pengguna]
akhir
go
yang tersimpan di atasmemperoleh semua catatan dalam 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
Setel MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr adalah string koneksi database
MyComm.CommandText = "getUserList" 'Tentukan nama prosedur tersimpan
MyComm.CommandType = 4 'Menunjukkan bahwa ini adalah prosedur tersimpan
MyComm.Prepared = true 'Memerlukan perintah SQL untuk dikompilasi terlebih dahulu
Setel MyRst = MyComm.Execute
Set MyComm = Nothing
Kumpulan catatan yang diperoleh dari prosedur tersimpan ditetapkan ke MyRst. Selanjutnya, MyRst dapat dioperasikan.
Pada kode di atas, atribut CommandType menunjukkan jenis permintaan. Nilai dan deskripsinya adalah sebagai berikut:
-1 menunjukkan bahwa tipe parameter CommandText tidak dapat ditentukan
1 menunjukkan bahwa CommandText adalah tipe perintah umum
2 menunjukkan bahwa parameter CommandText adalah nama tabel yang sudah ada
4 Menunjukkan bahwa parameter CommandText adalah nama prosedur tersimpan
. Prosedur tersimpan juga dapat dipanggil melalui objek Connection atau objek Recordset. Metodenya adalah sebagai berikut:
'**Panggil prosedur tersimpan melalui objek Connection**.
DIM MyConn, MyRst
Setel MyConn = Server.CreateObject("ADODB.Koneksi")
MyConn.open MyConStr 'MyConStr adalah string koneksi database
Setel MyRst = MyConn.Execute("getUserList",0,4) 'Parameter terakhir memiliki arti yang sama dengan CommandType
Set MyConn = Nothing
'**Panggil prosedur tersimpan melalui objek Recordset**
DIM MyRst
Setel MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.buka "getUserList",MyConStr,0,1,4
'MyConStr adalah string koneksi database, parameter terakhir memiliki arti yang sama dengan CommandType
2. Untuk prosedur tersimpan tanpa input dan output, silakan lihat prosedur tersimpan berikut:
/*SP2*/
BUAT PROSEDUR dbo.delUserAll
sebagai
tetapkan tidak ada hitungan
mulai
hapus dari dbo.[info pengguna]
akhir
go
disimpan menghapus semua catatan dalam tabel info pengguna tanpa input atau output apa pun. Metode pemanggilan pada dasarnya sama seperti yang disebutkan di atas, kecuali bahwa tidak perlu mendapatkan kumpulan catatan:
'**Panggil prosedur tersimpan melalui Perintah obyek**
DIM Komunikasi Saya
Setel 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
MyComm.Execute 'Tidak perlu mendapatkan kumpulan data di sini
Set MyComm = Nothing
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*/
BUAT PROSEDUR dbo.delUserAll
sebagai
tetapkan tidak ada hitungan
mulai
MULAI TRANSAKSI
hapus dari dbo.[info pengguna]
JIKA @@kesalahan=0
mulai
MELAKUKAN TRANSAKSI
kembali 1
akhir
KALAU TIDAK
mulai
TRANSAKSI KEMBALI
kembali 0
akhir
kembali
akhir
go
akan 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
Setel 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
'Deklarasikan nilai pengembalian
Setel Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Tambahkan MyPara
MyComm.Eksekusi
'Dapatkan nilai pengembaliannya
DIM nilai kembali
retValue = MyComm(0) 'atau retValue = MyComm.Parameters(0)
Set MyComm = Nothing
Di MyComm.CreateParameter("RETURN",2,4), arti dari masing-masing 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. Ini nilai kembaliannya, saya biasanya menyetelnya ke "RETURE";
Parameter kedua (2) menunjukkan tipe data parameter. Silakan merujuk ke referensi ADO untuk kode tipe tertentu yang diberikan di bawah ini:
iklanBigInt: 20;
adBiner: 128;
iklanBoolean: 11;
adChar: 129;
adDBTimeStamp: 135;
kosong: 0;
bilangan bulat iklan: 3;
iklanSmallInt: 2;
adTinyInt: 16;
adVarChar: 200;
Untuk nilai yang dikembalikan, hanya nilai integer yang dapat diambil, dan -1 hingga -99 adalah nilai yang dicadangkan;
Parameter ketiga (4) menunjukkan sifat parameter, dimana 4 menunjukkan bahwa ini adalah nilai kembalian. Penjelasan nilai parameter ini adalah sebagai berikut:
0: Jenisnya tidak dapat ditentukan; 1: Parameter masukan; 2: Parameter masukan; 3: Parameter masukan atau keluaran; 4: Nilai kembalian
Kode ASP yang diberikan di atas harus dikatakan sebagai kode lengkap, yaitu kode yang paling kompleks Faktanya,
Setel Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
bisa disederhanakan menjadi
MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
bahkan bisa terus disederhanakan 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 masukan 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*/
BUAT PROSEDUR dbo.getUserName
@UserID ke dalam,
@UserName varchar(40) keluaran
sebagai
tetapkan tidak ada hitungan
mulai
jika @UserID adalah pengembalian nol
pilih @NamaPengguna=nama pengguna
dari dbo.[info pengguna]
di mana userid=@UserID
kembali
akhir
memanggil
prosedur tersimpan adalah sebagai berikut:
'**Panggil prosedur tersimpan dengan parameter input dan output**
DIM MyComm, UserID, Nama Pengguna
ID Pengguna = 1
Setel 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 perintah SQL untuk dikompilasi terlebih dahulu
'Deklarasikan parameter
MyComm.Parameters.tambahkan MyComm.CreateParameter("@UserID",3,1,4,UserID)
MyComm.Parameters.tambahkan MyComm.CreateParameter("@UserName",200,2,40)
MyComm.Eksekusi
'Dapatkan parameternya
Nama Pengguna = Komunikasi Saya(1)
Setel MyComm = Nothing
Pada kode di atas, Anda dapat melihat bahwa tidak seperti mendeklarasikan nilai kembalian, 5 parameter diperlukan saat mendeklarasikan parameter masukan, 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 masukan, 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, Nama Pengguna
ID Pengguna = 1
Setel 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.tambahkan .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.tambahkan .CreateParameter("@UserName",200,2,40)
.Menjalankan
diakhiri dengan
Nama Pengguna = Komunikasi Saya(1)
Set MyComm = Nothing
Jika kita ingin mendapatkan username 10 user 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, Anda hanya perlu mengubah parameter masukan dan Anda akan mendapatkan parameter masukan yang berbeda:
'**Panggil prosedur tersimpan yang sama beberapa kali**
DIM MyComm, UserID, Nama Pengguna
Nama Pengguna = ""
Setel MyComm = Server.CreateObject("ADODB.Command")
untuk UserID = 1 sampai 10
denganKomunikasi Saya
.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
jika UserID = 1 maka
.Parameters.tambahkan .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.tambahkan .CreateParameter("@UserName",200,2,40)
.Menjalankan
kalau tidak
'Tetapkan kembali nilai pada parameter masukan (parameter masukan dan parameter keluaran yang nilai parameternya tidak berubah saat ini tidak perlu dideklarasikan ulang)
.Parameter("@UserID") = ID Pengguna
.Menjalankan
berakhir jika
diakhiri dengan
UserName = UserName + MyComm(1) + "," 'Mungkin Anda ingin menggunakan penyimpanan array
Berikutnya
Setel MyComm = Nothing
Seperti yang dapat dilihat dari kode di atas: ketika memanggil prosedur tersimpan yang sama berulang kali, Anda hanya perlu menetapkan ulang parameter input yang nilainya telah berubah. Metode ini memiliki beberapa parameter input dan output, dan hanya satu yang dipanggil setiap kali. Jumlah kode dapat dikurangi secara signifikan ketika nilai parameter input berubah.
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*/
BUAT PROSEDUR dbo.getUserName
--Untuk memperdalam kesan "keteraturan", balikkan urutan definisi dua parameter berikut.
@UserName varchar(40) keluaran,
@UserID ke dalam
sebagai
tetapkan tidak ada hitungan
mulai
jika @UserID adalah pengembalian nol
pilih @NamaPengguna=nama pengguna
dari dbo.[info pengguna]
di mana userid=@UserID
jika @@jumlah baris>0
kembali 1
kalau tidak
kembali 0
kembali
akhir
go
'**Panggil prosedur tersimpan dengan nilai kembalian, parameter masukan, dan parameter keluaran**
DIM MyComm, UserID, Nama Pengguna
ID Pengguna = 1
Setel MyComm = Server.CreateObject("ADODB.Command")
denganKomunikasi Saya
.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
' Nilai yang dikembalikan harus dideklarasikan terlebih dahulu
.Parameters.Tambahkan .CreateParameter("RETURN",2,4)
'Urutan deklarasi dua parameter berikut juga dibalik.
.Parameters.tambahkan .CreateParameter("@UserName",200,2,40)
.Parameters.tambahkan .CreateParameter("@UserID",3,1,4,UserID)
.Menjalankan
diakhiri dengan
jika MyComm(0) = 1 maka
Nama Pengguna = Komunikasi Saya(1)
kalau tidak
UserName = "Pengguna ini tidak ada"
berakhir jika
Set MyComm = Nothing
6. Prosedur tersimpan yang mengembalikan parameter dan kumpulan data pada saat yang sama. Terkadang, kita memerlukan prosedur tersimpan untuk mengembalikan parameter dan kumpulan data pada saat yang sama sebagai kumpulan catatan dan total data pada saat yang bersamaan. Berikut ini adalah prosedur tersimpan untuk paging:
/*SP6*/
BUAT PROSEDUR dbo.getUserList
@iPageCount int OUTPUT, --Jumlah total halaman
@iPage int, --Nomor halaman saat ini
@iPageSize int --Jumlah catatan per halaman
sebagai
tetapkan tidak ada hitungan
mulai
--Buat tabel sementara
buat tabel #t (ID int IDENTITAS, bidang --peningkatan otomatis
id pengguna ke dalam,
nama pengguna varchar(40))
--Tulis data ke tabel sementara
masukkan ke #t
pilih userid, nama pengguna dari dbo.[UserInfo]
pesan berdasarkan userid
--Dapatkan jumlah total catatan
nyatakan @iRecordCount int
set @iRecordCount = @@rowcount
--tentukan jumlah total halaman
JIKA @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
KALAU TIDAK
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
--Jika nomor halaman yang diminta lebih besar dari jumlah halaman total, halaman terakhir akan ditampilkan
JIKA @iPage > @iPageCount
SELECT @iPage = @iPageCount
-- menentukan awal dan akhir halaman saat ini
DECLARE @iStart int --start record
DEKLARASI @iEnd int --end record
PILIH @iStart = (@iPage - 1) * @iPageSize
PILIH @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
--mengembalikan jumlah total catatan
kembalikan @iRecordCount
akhir
Dalam prosedur tersimpan di atas,
go
memasukkan nomor halaman saat ini dan jumlah catatan per halaman, dan mengembalikan kumpulan catatan halaman saat ini, 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 halaman sekarang, ukuran halaman, jumlah halaman, jumlah rekaman
DIM MyComm, MyRst
halaman sekarang = Permintaan("pn")
'Fungsi khusus yang digunakan untuk memverifikasi bilangan asli
jika CheckNar(pagenow) = salah maka pagenow = 1
ukuran halaman = 20
Atur 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
'Nilai pengembalian (jumlah total catatan)
.Parameters.Tambahkan .CreateParameter("RETURN",2,4)
'Parameter keluaran (jumlah total halaman)
.Parameters.Tambahkan .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,ukuran halaman)
SetMyRst = .Jalankan
diakhiri dengan
jika MyRst.state = 0 maka 'Tidak ada data yang diperoleh, MyRst ditutup
jumlah catatan = -1
kalau tidak
MyRst.close 'Catatan: Untuk mendapatkan nilai parameter, Anda harus menutup objek recordset terlebih dahulu
jumlah catatan = MyComm(0)
jumlah halaman = Komunikasi Saya(1)
jika cint(pagenow)>=cint(jumlah halaman) maka halamansekarang=jumlah halaman
berakhir jika
Set MyComm = Nothing
'Tampilkan catatan di bawah
jika jumlah catatan = 0 maka
Respon.Tulis "Tidak ada catatan"
elseif jumlah catatan > 0 maka
MyRst.open
lakukan sampai MyRst.EOF
...
lingkaran
'Berikut ini menampilkan informasi paging
...
lain 'jumlah catatan=-1
Respon.Tulis "Kesalahan parameter"
end if
Mengenai kode di atas, hanya ada satu hal yang perlu dijelaskan: ketika mengembalikan recordset dan parameter secara bersamaan, jika ingin mendapatkan parameter, Anda harus menutup recordset terlebih dahulu, lalu membukanya ketika menggunakan kumpulan rekaman.
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 ke dalam,
@checklogin sedikit
sebagai
tetapkan tidak ada hitungan
mulai
jika @userid adalah null atau @checklogin adalah null, kembalikan
pilih nama pengguna
dari dbo.[usrinfo]
di mana userid=@userid
--Jika Anda adalah pengguna yang masuk, ambil usertel dan usermail
jika @checklogin=1
pilih penggunatel, email pengguna
dari dbo.[info pengguna]
di mana userid=@userid
kembali
akhir
Berikut ini
adalah kode ASP:
'**Panggil prosedur tersimpan yang mengembalikan beberapa kumpulan data**
Periksa DIM, UserID, UserName, UserTel, UserMail
DIM MyComm, MyRst
ID Pengguna = 1
'checklogin() adalah fungsi khusus untuk menentukan apakah pengunjung sudah login
periksalg = periksa masuk()
Setel 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
.Parameters.tambahkan .CreateParameter("@userid",3,1,4,UserID)
.Parameters.tambahkan .CreateParameter("@checklogin",11,1,1,checklg)
SetMyRst = .Jalankan
diakhiri dengan
Set MyComm = Nothing
'Dapatkan nilai dari kumpulan rekaman pertama
Nama Pengguna = MyRst(0)
'Dapatkan nilai dari kumpulan rekor kedua
jika tidak, MyRst bukanlah apa-apa, maka
Setel MyRst = MyRst.NextRecordset()
Telpon Pengguna = Pertama Saya(0)
UserMail = Pertama Saya(1)
berakhir jika
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, setidaknya tiga metode berikut ini layak untuk memanggil beberapa prosedur tersimpan:
1. Buat beberapa objek Command.
DIM Komunikasi Saya
Setel MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan satu
...
Setel MyComm = Tidak Ada
Setel MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan dua
...
Setel MyComm = Tidak Ada
......
2. Hanya buat objek Command, dan saat mengakhiri panggilan, hapus parameter
DIM MyComm
Setel MyComm = Server.CreateObject("ADODB.Command")
'Panggil prosedur tersimpan satu
.....
'Hapus parameter (dengan asumsi ada tiga parameter)
MyComm.Parameters.hapus 2
MyComm.Parameters.hapus 1
MyComm.Parameters.hapus 0
'Panggil prosedur tersimpan dua dan hapus parameter
...
Setel MyComm = Nothing
Saat ini, harap diperhatikan: urutan kliring parameter berlawanan dengan urutan deklarasi parameter. Saya tidak tahu alasannya.
3. Gunakan metode Refresh pada pengumpulan data Parameter untuk mereset objek Parameter
DIM MyComm
Setel 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 dua
.....
Set MyComm = Nothing
Secara umum diyakini bahwa membuat objek berulang kali adalah metode yang kurang efisien, namun 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). Kecepatan lari kedua metode ini jauh lebih cepat daripada metode 3 (hingga 130%). metode 1 bila ada banyak parameter. Jika tidak, gunakan metode 2.
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.