Saat mengembangkan aplikasi web, akses database selalu diperlukan untuk menyelesaikan operasi seperti kueri, penyisipan, pembaruan, dan penghapusan data. Dipengaruhi oleh logika aplikasi, terkadang perlu untuk menggabungkan beberapa instruksi operasi database ke dalam satu unit kerja (transaksi). Dalam database, transaksi mengacu pada sekumpulan unit operasi logis yang mengubah data dari satu keadaan ke keadaan lainnya. Untuk memastikan konsistensi data dalam database, data harus dioperasikan dalam kelompok unit logis yang terpisah: ketika semuanya selesai, konsistensi data dapat dipertahankan tetapi ketika sebagian operasi dalam unit tersebut gagal, keseluruhannya transaksi akan diabaikan, semua operasi dari titik awal dan seterusnya dikembalikan ke keadaan awal.
Faktanya, setiap operasi pada database secara implisit bersifat transaksional secara default. Artikel ini mengambil program pendaftaran pengguna biasa sebagai contoh untuk memperkenalkan tiga metode menggunakan ASP untuk mengimplementasikan pemrosesan transaksi: solusi berdasarkan komponen database ASP, solusi berdasarkan mekanisme pemrosesan transaksi dalam database, dan solusi berdasarkan komponen MTS .
Fungsi program
Buat dua tabel di database SQL Server: tabel USER dan tabel USERDOC. Tabel USER menyimpan nama pengguna dan kata sandi pengguna terdaftar, dan tabel USERDOC menyimpan informasi pribadi pengguna terdaftar, diindeks berdasarkan nama pengguna. Berikut pengertian tabel USER dan USERDOC:
Buat Tabel PENGGUNA(Namapengguna varchar(30),userPasswd varchar(30))
Buat Tabel USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50))
Ketika pengguna meminta registrasi, skrip ASP pertama-tama memasukkan nama pengguna dan kata sandi ke dalam tabel USER, dan kemudian di USERDOC Masukkan informasi pribadi pengguna (usia, jenis kelamin, nomor kontak, alamat rumah, dll.) ke dalam tabel. Pada saat yang sama, aplikasi juga harus memastikan bahwa setiap record di tabel USER memiliki record yang sesuai di tabel USERDOC.
Metode 1 menggunakan objek Connection di komponen ADO bawaan ASP untuk mengimplementasikan pemrosesan transaksional operasi database. Beberapa metode objek Connection adalah sebagai berikut:
●Metode Connection.BeginTrans: memulai transaksi;
●Metode Connection.CommitTrans: menyelesaikan/mengirimkan transaksi;
●Metode Connection.RollBackTrans: Membatalkan/meninggalkan transaksi.
//Memulai operasi transaksi
<%Samb.BeginTrans%>
<% sqlText="Masukkan ke nilai USER(userName,userPasswd)('" %>
<% sqlText=sqlTeks & permintaan("usrName") & "','"&request("usrPasswd")&"') " %>
<% samb.execute(sqlText) %>
<% jika samb.Errors.Count>0 lalu %>
<% samb.Kesalahan.Hapus %>
//Jika operasi penyisipan data gagal, transaksi akan dibatalkan
<% samb.RollBackTrans %>
<% respon.Redirect RegisterFail.html %>
<% berakhir jika %>
<% sqlText="Masukkan ke USERDOC(Nama Pengguna,Umur,Jenis Kelamin,Nomor Telepon,Alamat) "%>
<% sqlText=sqlText & "values('"& permintaan ("usrName") & "', " & permintaan("Umur") %>
<% sqlText=sqlTeks & ",'" & permintaan ("Nomor Telepon") & "','" %>
<% sqlText=sqlTeks & permintaan("Alamat") & "') " %>
//Jalankan pernyataan penyisipan kedua di unit transaksi
<% samb.execute(sqlText) %>
<% jika samb.Errors.Count>0 lalu %>
<% samb.Kesalahan.Hapus %>
//Jika operasi gagal, transaksi akan dikembalikan ke depan
<% samb.RollBackTrans %>
<% respon.Redirect RegisterFail.html %>
<% berakhir jika %>
//Jika seluruh operasi transaksi dijalankan dengan benar, komit transaksi tersebut
<% Sambungan.CommitTrans %>
//Buka halaman pemrosesan keberhasilan pendaftaran
<% respon.Redirect DaftarOk.html %>
Metode 2 dapat menggunakan mekanisme pemrosesan transaksi dalam sistem database untuk menyelesaikan pemrosesan transaksi operasi data dengan menulis prosedur tersimpan yang berisi transaksi di server database. Pada saat yang sama, dengan menggunakan komponen ADO untuk memanggil prosedur tersimpan, Anda juga dapat menentukan apakah transaksi berhasil dijalankan berdasarkan kode pengembalian dari prosedur tersimpan.
Dalam sistem database, setiap pernyataan SQL adalah sebuah transaksi. Oleh karena itu, dijamin setiap pernyataan akan lengkap atau kembali ke awal. Namun, jika Anda ingin operasi sekumpulan pernyataan SQL selesai atau semuanya tidak valid, Anda perlu menggunakan mekanisme pemrosesan transaksi database untuk mencapai hal ini.
Kode utama untuk menghasilkan prosedur tersimpan dalam database adalah sebagai berikut:
Buat proc RegisterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50) ) sebagai awal
//Menampilkan definisi dan memulai transaksi
mulai transfer
masukkan ke dalam nilai USER(userName,userPasswd)(@usrName,@usrPasswd)
jika @@kesalahan<>0
mulai
//Jika operasi gagal, transaksi akan dibatalkan
kembalikan transfer
//Kembali ke prosedur tersimpan dan atur kode pengembalian ke kegagalan operasi transaksi
kembali -1
akhir
masukkan ke USERDOC(Nama pengguna,umur,jenis kelamin,Nomor Telepon,Alamat)
nilai(@NamaUsr,@usia,@Nomor Telepon,@Alamat)
jika @@kesalahan<>0
mulai
//Jika operasi gagal, transaksi akan dibatalkan
kembalikan transfer
kembali -1
akhir
//Jika operasi dilakukan dengan benar, lakukan transaksi
melakukan trans
kembali 0
akhir
Kode utama untuk memanggil prosedur tersimpan database dalam skrip ASP adalah sebagai berikut:
<% Setel Komunikasi=server.CreateObject
("ADODB.Perintah") %>
<% Setel Komunikasi.ActiveConnection=sambungan %>
<% Comm.CommandType=adCmdStoredProc %>
<% Comm.CommandText="RegisterUser" %>
//Buat prosedur tersimpan untuk mengembalikan objek parameter
<% Setel RetCode=Comm.CreateParameter
("RetCode",adInteger,adParamReturnValue) %>
//Membuat objek parameter input prosedur tersimpan
<% Tetapkan usrName=Comm.CreateParameter ("usrName",adVarchar,adParamInput,30) %>
<% Setel usrPwd=Comm.CreateParameter
("usrPasswd",adVarchar,adParamInput,30) %>
<% Tetapkan age=Comm.CreateParameter("age",adInteger,adParamInput) %>
<% Setel PhoneNum=Comm.CreateParameter
("Nomor Telepon",adVarchar,adParamInput, 20) %>
<% Tetapkan Alamat=Comm.CreateParameter("Alamat",adVarchar,adParamInput,50) %>
<% Comm.Parameters.Tambahkan usrName %>
<% Comm.Parameters.Tambahkan usrPwd %>
<% Comm.Parameters.Tambahkan usia %>
<% Comm.Parameters.Tambahkan PhoneNum %>
<% Comm.Parameters.Tambahkan Alamat %>
<% Comm.Parameters("usrName")=permintaan("usrName") %>
<% Comm.Parameters("usrPasswd")=permintaan("usrPasswd") %>
<% Comm.Parameters("usia")=permintaan("usia") %>
<% Comm.Parameters("PhoneNum")=permintaan("PhoneNum") %>
<% Comm.Parameters("Alamat")=permintaan("Alamat") %>
<% Komunikasi. Jalankan %>
<% RetValue=Cint(Comm("RetCode")) %>
//Tentukan apakah pendaftaran berhasil berdasarkan kode pengembalian prosedur tersimpan di database
<% jika RetValue< 0 lalu %>
<% respon.Redirect RegisterFail.html %>
<% lain %>
<% respon.Redirect RegisterOk.html %>
<% berakhir jika %>
Metode 3: Saat menggunakan mekanisme pemrosesan transaksi komponen MTS (Microsoft Transaction Server) untuk mengimplementasikan pemrosesan transaksi, perhatian khusus harus diberikan pada fakta bahwa transaksi dalam mekanisme ini tidak dapat menjangkau beberapa halaman ASP jika suatu transaksi memerlukan objek dari beberapa komponen , Anda harus menggabungkan operasi pada objek ini di halaman ASP.
Pertama, Anda perlu menambahkan direktif @TRANSACTION di bagian atas halaman untuk mendeklarasikan halaman ASP sebagai transaksional.
Perintah @TRANSACTION harus berada di baris pertama halaman, jika tidak, kesalahan akan terjadi. Ketika pemrosesan skrip ASP di halaman berakhir, transaksi saat ini berakhir.
<%@ TRANSACTION=Bahasa yang Diperlukan=
VBScript%>
//Event berhasil dipicu oleh eksekusi transaksi
<%Sub OnTransactionCommit() %>
<% respon.Redirect RegisterOk.html %>
<% Akhir Sub%>
//Peristiwa dipicu ketika sesuatu gagal dijalankan
<%Sub PadaTransactionAbort() %>
<% respon.Redirect RegisterFail.html %>
<% Akhir Sub%>
<% sqlText="Masukkan ke nilai USER(userName,userPasswd)('" %>
<% sqlText=sqlTeks & permintaan("usrName") & "','" &request("usrPasswd")&"') " %>
<% samb.execute(sqlText) %>
<% jika samb.Errors.Count>0 lalu %>
<% samb.Kesalahan.Hapus %>
<% ObjectContext.SetAbort %>
<% berakhir jika %>
<% sqlText="Masukkan ke USERDOC(Nama Pengguna,Umur,Jenis Kelamin,Nomor Telepon,Alamat) "%>
<% sqlText=sqlText & "values('" & permintaan("usrName")& "', " & permintaan("Usia") %>
<% sqlText=sqlText & ",'" & permintaan("Nomor Telepon") & "','" %>
<% sqlText=sqlTeks & permintaan("Alamat") & "') " %>
<% samb.execute(sqlText) %>
<% jika samb.Errors.Count>0 lalu %>
<% samb.Kesalahan.Hapus %>
<% ObjectContext.SetAbort %>
<% berakhir jika %>
<% ObjectContext.SetLengkap%>
Solusinya lebih fleksibel. Metode penggunaan komponen database ASP memiliki keuntungan tertentu: Anda dapat menggunakan komponen database ADO untuk menyelesaikan pemrosesan transaksi, dan Anda juga dapat menyesuaikan komponen database Anda sendiri sesuai dengan kebutuhan sebenarnya (selama memenuhi komponen ASP). spesifikasi tulisan) Bisa). Jika Anda mempertimbangkan keandalan pemrosesan transaksi database, lebih baik menggunakan prosedur pemrosesan transaksi yang tersimpan di dalam database. Dengan cara ini, mekanisme transaksi database dapat langsung digunakan untuk menyelesaikan pemrosesan transaksi logis aplikasi, yang aman dan andal, serta mengurangi interaksi data antara server Web dan server database. Hal ini sangat penting untuk sistem database terdistribusi. Keuntungan dari metode pemrosesan transaksi menggunakan komponen MTS adalah bahwa server MTS secara langsung mengontrol dan mengelola penyelesaian dan pembatalan operasi komponen (komponen yang terdaftar di MTS). Ia memiliki ruang ekspansi dan prospek aplikasi yang baik, dan dapat memberikan permainan penuh pada teknis keunggulan MTS. Meningkatkan kinerja toleransi kesalahan aplikasi jaringan dan meningkatkan kinerja dinamis server web IIS.