ASP Kuliah 9: ASP dan Database (4)
Penulis:Eve Cole
Waktu Pembaruan:2009-05-30 19:54:56
Dalam kuliah ini, kami terutama akan memperkenalkan cara menggunakan parameter dan prosedur tersimpan.
1. Gunakan objek Command dan objek Parameter untuk mentransfer parameter. Kuliah ini terutama akan menggunakan database Microsoft SQL Server7.0. Pertama, buat file koneksi AdoSQL7.asp untuk cadangan masa depan.
<% 'AdoSQL7.asp
Opsi Eksplisit
Respon. Kedaluwarsa = 0
'Bagian 1: Membangun koneksi
Redupkan Cnn, StrCnn
Setel Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Penyedia=sqlledb; ID Pengguna=sa; Kata Sandi=; Katalog Awal=pub; Sumber Data=ICBCZJP"
Cnn.Buka StrCnn
%>
Catatan: Saat menggunakannya sendiri, atur Sumber Data ke nama mesin server database Anda.
Selain itu, saat menggunakan database Access di masa lalu, sangat nyaman menggunakan Microsoft Access97 untuk melihat bidang dan data. Namun, saat menggunakan database SQL Server, terutama saat men-debug skrip ASP bukan di server database tetapi di komputer lain diperlukan untuk melihat bidang dan data. Data perlu diinstal secara terpisah. Berikut ini alat untuk Anda: Msqry32.exe (Microsoft Query).
Contoh wuf70.asp:
<%@ LANGUAGE="VBSCRIPT" %>
<!--#termasuk file="AdoSQL7.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf70.asp
Redupkan cmdTest, prmTest, rsTest
'Buat objek Perintah
Setel cmdTest = Server.CreateObject("ADODB.Command")
'Objek Recordset dan Command dapat terhubung ke objek Connection melalui properti ActiveConnection.
cmdTest.ActiveConnection = Cnn
'Perintah SQL - berisi dua parameter, gunakan? cepat
cmdTest.CommandText = "Perbarui pekerjaan Set job_desc = ? Di mana job_id = ?"
'Atur jenis perintah menjadi pernyataan SQL
cmdTest.CommandType = adCmdText
Atribut 'Prepared menentukan apakah akan mengkompilasi perintah SQL terlebih dahulu. Menyetelnya ke True dapat mempercepat eksekusi.
cmdTest.Siap = Benar
'Buat objek Parameter
Setel prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"jaringan")
'Tambahkan data ke pengumpulan data Parameter
cmdTest.Parameters.Tambahkan prmTest
Setel prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.Tambahkan prmTest
'Jalankan modifikasi - tidak perlu mengembalikan hasil, cukup gunakan cmdTest.Execute
cmdTest.Jalankan
'Setel ulang parameter dan jalankan – Anda dapat mengubah bagian data lainnya
cmdTest.Parameter("job_id") = "1"
cmdTest.Parameters("job_desc") = "Uji"
cmdTest.Jalankan
'Setel ulang parameter untuk dijalankan
cmdTest("job_id") = "14"
cmdTest("job_desc") = "Keuangan"
cmdTest.Jalankan
Setel rsTest = Cnn.Execute("Pilih job_id,job_desc Dari pekerjaan")
Meskipun Bukan rsTest.EOF
Respon.Tulis rsTest(0) & rsTest(1) & "<br>"
rsTest.MoveNext
Pergi ke
Cnn.close : Setel prmTest = Tidak Ada
Setel cmdTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
menganalisa:
1. Metode CreateParameter dari objek Command digunakan untuk membuat objek parameter untuk perintah SQL atau prosedur tersimpan. Ada total lima parameter (kelima parameter bersifat opsional):
Parameter pertama: nama objek parameter;
Parameter kedua: tipe data objek parameter, terlalu banyak tipe, silakan lihat bantuan ADO, di sini adVarChar (nilai string), adSmallInt (integer bertanda 2-byte);
Parameter ketiga: tipe parameter. Dapat berupa: adParamInput (menunjukkan parameter masukan), adParamOutput (menunjukkan parameter keluaran), adParamReturnValue (menunjukkan nilai kembalian), adParamUnknown (menunjukkan bahwa jenis parameter tidak dapat ditentukan), adParamInputOutput (menunjukkan parameter masukan/keluaran);
Parameter keempat: panjang data parameter. Yang terbaik adalah menentukannya sama dengan panjang bidang terkait dalam database untuk menghindari kesalahan saat menggunakannya, terutama bila tipe datanya adalah VarChar jenis tanggal, Anda tidak perlu memberikan nilai ini;
Parameter kelima: nilai awal pengaturan parameter.
2. Metode cmdTest.Parameters.Append menambahkan objek Parameter ke kumpulan data Parameter. Dari contoh ini, Anda juga dapat melihat cara menggunakan beberapa parameter.
3. Seperti yang Anda lihat dari contoh ini, Anda hanya perlu mengatur ulang parameter input untuk mengubah data lain, yang sangat memudahkan. Ide ini juga merupakan salah satu metode yang paling umum digunakan dalam pemrograman.
4. Untuk mengatur ulang parameter, Anda dapat menggunakan cmdTest.Parameters atau menghilangkannya sebagai cmdTest("job_id").
2. Menggunakan prosedur tersimpan di ASP. Apa itu prosedur tersimpan (prosedur tersimpan terletak di server database dan merupakan kumpulan pernyataan SQL yang dapat berisi satu atau lebih pernyataan SQL). isi kuliah ini. Kuliah ini Terutama memberikan contoh untuk menggambarkan bagaimana memanggil prosedur tersimpan di ASP.
Manfaat menggunakan prosedur tersimpan sangat besar. Prosedur tersimpan lebih efisien daripada menjalankan perintah SQL dalam skrip ASP; prosedur tersebut dapat meningkatkan kinerja secara keseluruhan dan mengurangi beban jaringan (mengurangi interaksi antara server jaringan dan server data); dan meningkatkan fleksibilitas kode, dll.
(1) Menggunakan parameter input dalam prosedur tersimpan Prosedur tersimpan yang digunakan dalam contoh ini adalah "byroyalty" yang disertakan dengan SQL Server 7.0. Pernyataan SQL di dalamnya sangat sederhana. Ini tidak lebih dari byroyalty CREATE PROCEDURE tambahan dan sebuah input . Parameternya adalah @persentase:
BUAT PROSEDUR berdasarkan royalti @percentage int
SEBAGAI
pilih au_id dari penulis judul
di mana titleauthor.royaltyper = @percentage
Contoh wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#termasuk file="AdoSQL7.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf71.asp
Redupkan cmdTest, prmTest, rsTest
Setel cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.CommandText = "byroyalty" 'Nama prosedur yang disimpan
'Atur jenis perintah sebagai prosedur tersimpan
cmdTest.CommandType = adCmdStoredProc
'Buat objek Parameter
Setel prmTest = Server.CreateObject("ADODB.Parameter")
'Jenis atribut sesuai dengan parameter kedua di wuf70.asp
prmTest.Type = adInteger 'integer bertanda 4-byte' Atribut arah sesuai dengan parameter ketiga di wuf70.asp
prmTest.Direction = adParamInput
'Atribut nilai sesuai dengan parameter kelima di wuf70.asp
prmTest.Nilai = 30
cmdTest.Parameters.Tambahkan prmTest
Setel cmdTest.ActiveConnection = Cnn
'Anda perlu mengembalikan kumpulan data, jadi gunakan Set rsTest = cmdTest.Execute
Setel rsTest = cmdTest.Jalankan
Meskipun Bukan rsTest.EOF
Respon.Tulis rsTest(0) & "<br>"
rsTest.MoveNext
Pergi ke
Cnn.tutup
Setel rsTest = Tidak Ada : Setel prmTest = Tidak Ada
Setel cmdTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
Properti CommandText dapat menentukan perintah SQL, prosedur tersimpan, atau nama tabel.
Pada contoh ini, pembuatan objek Parameter sedikit berbeda dengan wuf70.asp. Sebenarnya jika diperhatikan dengan seksama, artinya sama. Ada dua atribut yang tidak digunakan dalam contoh ini: prmTest.Name, prmTest.Size, plus Type, Direction. dan Nilai, sesuai dengan lima parameter di wuf70.asp.
(2) Saat menggunakan parameter keluaran untuk mendapatkan catatan atau menghitung nilai dari tabel database, Anda perlu menggunakan prosedur tersimpan yang mengembalikan parameter keluaran. Sebagai contoh, pertama-tama buat prosedur tersimpan baru OUTemploy di perpustakaan pubs SQL Server. Prosedur tersimpan ini perlu memasukkan dua tanggal dan kemudian mengeluarkan nilai maksimum.
BUAT PROSEDUR OUTemploy
(
@job_lvl keluaran kecil,
@hire_date1 waktu tanggal,
@hire_date2 waktu tanggal
)
SEBAGAI
pilih @job_lvl = MAX(job_lvl) dari karyawan
di mana tanggal_sewa >= @tanggal_sewa1 dan tanggal_sewa <= @tanggal_sewa2
Ada beberapa cara untuk membuat prosedur tersimpan:
1. Gunakan Manajer Perusahaan Microsoft SQL Server. Setelah membukanya, buka di direktori pohon di sebelah kiri: Console Root – Microsoft SQL Servers – SQL Server Group – ICBCZJP (Windows NT) – database – pub – prosedur tersimpan – Prosedur tersimpan baru. .Masuk ke prosedur tersimpan. Terakhir, deteksi tata bahasa juga dapat dilakukan di dalamnya;
2. Menggunakan Query Analyzer Microsoft SQL Server, pertama-tama sambungkan ke server database dan pilih database pubs. Masukkan prosedur tersimpan di atas dan klik Jalankan Kueri (atau tekan F5);
3. Menggunakan VB6.0, setelah membuka menu "View"/"Data View Window", klik kanan "Data Link"/"New Data Link";
4. Gunakan skrip ASP untuk membuat prosedur tersimpan, misalnya wuf75.asp:
<% @LANGUAGE = VBScript %>
<!--#termasuk file="AdoSQL7.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf75.asp
DimStrSQL
'Catatan: & Chr(10) & Chr(13) sama sekali tidak diperlukan, terutama untuk ketampanan.
StrSQL="BUAT PROSEDUR OUTemploy ( @job_lvl tinyint OUTPUT, " & Chr(10) & Chr(13) &_
"@hire_date1 datetime, @hire_date2 datetime) AS " & Chr(10) & Chr(13) &_
"pilih @job_lvl = MAX(job_lvl) dari karyawan " &_
"di mana tanggal_sewa >= @tanggal_sewa1 dan tanggal_sewa <= @tanggal_sewa2"
Cnn.Jalankan StrSQL
Response.Tulis "Berhasil membuat prosedur tersimpan"
Cnn.close: Setel Cnn = Tidak Ada
%>
Setelah prosedur tersimpan dibuat, selain menggunakan menu, Anda juga dapat menggunakan pernyataan SQL "Drop Procedure OUTemploy" untuk menghapusnya.
Contoh wuf72.asp – Kirim parameter masukan yang diperlukan ke prosedur tersimpan dan dapatkan hasil keluaran.
<% @LANGUAGE = VBScript %>
<!--#termasuk file="AdoSQL7.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf72.asp
Redupkan cmdTest, prmTest
Setel cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "OUTemploy" 'Nama prosedur tersimpan
cmdTest.CommandType = adCmdStoredProc
'Buat objek Parameter
Setel prmTest = cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)
cmdTest.Parameters.Tambahkan prmTest
'adTinyInt - bilangan bulat bertanda 1 byte
'adDbDate - nilai tanggal (yyyymmdd)
Setel prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.Tambahkan prmTest
Setel prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.Tambahkan prmTest
cmdTest.Jalankan
'Tiga ungkapan berikut memiliki arti yang sama
Respon.Tulis cmdtest("job_lvl") & "<br>"
Respons.Tulis cmdTest.Parameters("job_lvl") & "<br>"
Respons.Tulis cmdTest.Parameters("job_lvl").Nilai
Cnn.tutup
Setel prmTest = Tidak Ada
Setel cmdTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
(3) Gunakan parameter kode pengembalian untuk menggunakan pernyataan Return untuk mengembalikan kode pengembalian yang berbeda dari prosedur tersimpan. Misalnya, prosedur tersimpan berikut pertama-tama memperoleh kumpulan catatan, dan kemudian mengembalikan 1 jika ada karyawan bernama Margaret, jika tidak maka akan mengembalikan 1. mengembalikan 0.
Buat Prosedur Pengembalian Karyawan
SEBAGAI
pilih emp_id, nama f dari karyawan
Jika Ada (Pilih fname Dari karyawan Dimana fname='Margaret')
Kembali(1)
Kalau tidak
Kembali(0)
Contoh wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#termasuk file="AdoSQL7.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf73.asp
Redupkan cmdTest, prmTest, rsTest
Setel cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "Returnemploy" 'Nama prosedur tersimpan
cmdTest.CommandType = adCmdStoredProc
Setel prmTest = cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)
cmdTest.Parameters.Tambahkan prmTest
Setel rsTest = cmdTest.Execute()
Meskipun Bukan rsTest.EOF
Respon.Tulis rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
Pergi ke
rsTest.Tutup: Setel rsTest = Tidak Ada
'Sebelum mengembalikan cmdtest("ReturnValue"), rsTest harus ditutup terlebih dahulu, jika tidak maka hasilnya akan salah
Jika cmdtest("ReturnValue") = 1 Maka
Respon.Tulis “Ada karyawan ini”
Kalau tidak
Respon.Tulis "Tidak ada karyawan seperti itu"
Akhiri Jika
Cnn.tutup
Setel prmTest = Tidak Ada
Setel cmdTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
3. Cara mengolah data besar "Data besar" di sini terutama mengacu pada bidang Teks (teks besar) dan gambar (image), yang datanya tidak dapat diperoleh dengan benar menggunakan metode yang dijelaskan di atas. Anda harus terlebih dahulu menggunakan Size = rsTest(0).ActualSize untuk mendapatkan panjang sebenarnya dari nilai bidang, lalu menggunakan rsTest(0).GetChunk(Size) untuk mendapatkan datanya. Dalam penggunaan sebenarnya, karena bidang ini relatif besar, untuk menghemat dan menggunakan sumber daya server secara rasional, pembacaan tersegmentasi umumnya diadopsi. Contoh wuf74.asp:
<% @LANGUAGE = VBScript %>
<!--#termasuk file="AdoSQL7.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf74.asp
Redupkan StrSQL, rsTest
'pr_info adalah bidang teks
StrSQL = "Pilih pr_info,pub_id Dari pub_info"
Setel rsTest = Cnn.Execute(StrSQL)
Redupkan BasicSize, BeginSize, LText
Lakukan Saat Bukan rsTest.EOF
Respon.Tulis rsTest(1) & "<br>"
'Baca 1024 byte setiap kali
Ukuran Dasar = 1024
Ukuran Mulai = 0
Sementara BeginSize < rsTest(0).ActualSize
LTeks = rsTest(0).GetChunk(Ukuran Dasar)
Ukuran Mulai = Ukuran Mulai + Ukuran Dasar
'Output ke klien segmen demi segmen
Respon.Tulis LText
Pergi ke
Respon.Tulis "<br><br>"
rsTest.MoveNext
Lingkaran
Cnn.tutup
Setel rsTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
Dalam contoh ini, maksimum 1024 byte dibaca setiap kali, dan data dibaca beberapa kali. Sebaliknya, jika Anda menulis data besar ke database, caranya sama seperti di atas, namun alih-alih menggunakan metode GetChunk, Anda menggunakan metode AppendChunk:
rsTest(0).AppendChunkLteks
Catatan: Terakhir, saya akan memperkenalkan sedikit trik tentang database SQL Server. Jika Anda mengalami situasi ini: data berbahasa Mandarin di database ditampilkan sebagai karakter yang kacau, mohon jangan panik. Anda hanya perlu mengunjungi situs saya untuk mengunduh sqlsrv32.dll dan menimpa file dengan nama yang sama di bawah "C:WindowsSystem". Sumber masalahnya adalah pengandar SQL Server, yang biasanya terjadi pada Windows 98 Second Edition (nomor versi pengandar SQL Server adalah 3.70.06.23) atau Windows 2000 atau ketika MDAC2.5 (nomor versi 3.70.08.20) diinstal .