Alamat asli: http://www.51la.org/webjx/htmldata/2005-12-24/1135405777.html
Abstrak Panggilan prosedur tersimpan biasanya digunakan dalam sistem b/s. Metode pemanggilan tradisional tidak hanya lambat, tetapi kodenya akan terus berkembang seiring dengan bertambahnya jumlah prosedur tersimpan, sehingga sulit untuk dipelihara. Metode baru ini memecahkan masalah ini sampai batas tertentu.
Kata kunci asp.net; prosedur tersimpan Dalam proses penggunaan .net, akses database merupakan bagian yang sangat penting, terutama dalam proses pembangunan sistem b/s, pengoperasian database hampir menjadi operasi yang penting. Memanggil prosedur tersimpan untuk mengimplementasikan operasi database adalah metode yang digunakan oleh banyak pemrogram, dan sebagian besar pemrogram menggunakan prosedur tersimpan jika mereka bisa, dan jarang menggunakan pernyataan SQL secara langsung, sehingga prosedur tersimpan sangat berguna dan penting.
Pengenalan prosedur tersimpan
Sederhananya, prosedur tersimpan adalah prosedur terenkapsulasi yang terdiri dari beberapa pernyataan SQL dan pernyataan kontrol. Prosedur tersebut berada di database dan dapat dipanggil oleh aplikasi klien atau dari prosedur atau pemicu lain. Parameternya dapat diteruskan dan dikembalikan. Mirip dengan prosedur fungsi dalam aplikasi, prosedur tersimpan dapat dipanggil berdasarkan nama, dan juga memiliki parameter input dan output.
Menurut jenis nilai kembalian yang berbeda, kita dapat membagi prosedur tersimpan menjadi tiga kategori: prosedur tersimpan yang mengembalikan kumpulan data, prosedur tersimpan yang mengembalikan nilai numerik (juga disebut prosedur tersimpan skalar), dan prosedur tersimpan perilaku. Sesuai dengan namanya, hasil eksekusi dari prosedur tersimpan yang mengembalikan kumpulan rekaman adalah kumpulan rekaman. Contoh umumnya adalah mengambil rekaman yang memenuhi satu atau beberapa kondisi dari database; prosedur tersimpan yang mengembalikan nilai numerik mengembalikan nilai setelah eksekusi, misalnya, dalam database Jalankan fungsi atau perintah dengan nilai kembalian dan terakhir, prosedur tersimpan perilaku hanya digunakan untuk mengimplementasikan fungsi tertentu dari database tanpa nilai kembalian, seperti operasi pembaruan dan penghapusan di database; .
Keuntungan menggunakan prosedur tersimpan
Dibandingkan dengan menggunakan pernyataan SQL secara langsung, memanggil prosedur tersimpan secara langsung dalam suatu aplikasi memiliki manfaat sebagai berikut:
(1) Mengurangi lalu lintas jaringan. Mungkin tidak ada perbedaan besar dalam lalu lintas jaringan antara memanggil prosedur tersimpan dengan sejumlah kecil baris dan memanggil pernyataan SQL secara langsung. Namun, jika prosedur tersimpan berisi ratusan pernyataan SQL, kinerjanya pasti lebih baik daripada memanggil pernyataan SQL satu per satu satu. jauh lebih tinggi.
(2) Kecepatan eksekusi lebih cepat. Ada dua alasan: Pertama, ketika prosedur tersimpan dibuat, database telah menguraikan dan mengoptimalkannya satu kali. Kedua, setelah prosedur tersimpan dijalankan, salinan prosedur tersimpan akan disimpan dalam memori, sehingga pada saat prosedur tersimpan yang sama dijalankan, prosedur tersebut dapat dipanggil langsung dari memori.
(3) Kemampuan beradaptasi yang lebih kuat: Karena prosedur tersimpan mengakses database melalui prosedur tersimpan, pengembang database dapat membuat perubahan apa pun pada database tanpa mengubah antarmuka prosedur tersimpan, dan perubahan ini tidak akan memengaruhi database.
(4) Pekerjaan terdistribusi: Pekerjaan pengkodean aplikasi dan database dapat dilakukan secara mandiri tanpa saling menekan.
Dari analisa di atas terlihat perlunya penggunaan prosedur tersimpan dalam aplikasi.
Dua Metode Berbeda dalam Memanggil Prosedur Tersimpan
Untuk menyoroti keunggulan metode baru ini, pertama-tama mari kita perkenalkan metode "resmi" dalam memanggil prosedur tersimpan di .net. Selain itu, semua contoh program dalam artikel ini berfungsi pada database sqlserver. Situasi lainnya serupa dan tidak akan dijelaskan satu per satu di masa mendatang. Semua contoh dalam artikel ini dalam bahasa C#.
Untuk mengakses database dalam suatu aplikasi, langkah umum adalah: pertama mendeklarasikan koneksi database sqlconnection, dan kemudian mendeklarasikan perintah database sqlcommand untuk menjalankan pernyataan sql dan prosedur tersimpan. Dengan dua objek ini, Anda dapat menggunakan metode eksekusi yang berbeda untuk mencapai tujuan Anda sesuai dengan kebutuhan Anda. Yang perlu ditambahkan adalah jangan lupa menambahkan pernyataan referensi berikut pada halaman tersebut: menggunakan system.data.sqlclient.
Sejauh menjalankan prosedur tersimpan, jika jenis prosedur tersimpan pertama dijalankan, maka adaptor data harus digunakan untuk mengisi hasilnya ke dalam kumpulan data, dan kemudian kontrol kisi data dapat digunakan untuk menyajikan hasilnya pada halaman; jika dijalankan Jika ini adalah prosedur tersimpan kedua dan ketiga, prosedur ini tidak diperlukan. Anda hanya perlu menentukan apakah operasi berhasil diselesaikan berdasarkan pengembalian spesifik.
(1) Kode untuk menjalankan prosedur tersimpan tanpa parameter adalah sebagai berikut:
sqlconnection conn=koneksi sql baru("string koneksi");
sqldataadapter da = new sqldataadapter();
da.selectcommand = perintah sql baru();
da.selectcommand.connection = samb;
da.selectcommand.commandtext = "namaprosedur";
da.selectcommand.commandtype = commandtype.storedprocedure;
Kemudian pilih saja cara yang tepat untuk melakukan proses di sini untuk tujuan yang berbeda.
(2) Kode untuk mengeksekusi prosedur tersimpan dengan parameter adalah sebagai berikut (kita dapat mendeklarasikan fungsi yang memanggil prosedur tersimpan sebagai exeprocedure(string inputdate)):
sqlconnection conn=koneksi sql baru("string koneksi");
sqldataadapter da = new sqldataadapter();
da.selectcommand = perintah sql baru();
da.selectcommand.connection = samb;
da.selectcommand.commandtext = "namaprosedur";
da.selectcommand.commandtype = commandtype.storedprocedure;
(Kode diatas sama, berikut kode yang akan ditambahkan)
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = parameterdirection.input;
param.value = convert.todatetime(tanggal masukan);
da.selectcommand.parameters.add(param);
Ini menambahkan parameter input. Jika Anda perlu menambahkan parameter keluaran:
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = parameterdirection.output;
param.value = convert.todatetime(tanggal masukan);
da.selectcommand.parameters.add(param);
Untuk mendapatkan nilai kembalian dari prosedur tersimpan parameter:
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = parameterdirection.returnvalue;
param.value = convert.todatetime(tanggal masukan);
da.selectcommand.parameters.add(param);
Dari kode di atas kita dapat melihat bahwa ketika terdapat banyak prosedur tersimpan atau terdapat banyak parameter dalam prosedur tersimpan, metode ini akan sangat mempengaruhi kecepatan pengembangan, sebaliknya jika proyeknya relatif besar, maka fungsi-fungsi tersebut akan berfungsi logika database akan Ini juga akan menjadi beban besar dalam pemeliharaan di masa depan. Jadi, adakah cara yang lebih baik untuk mengatasi masalah ini? Saya pikir ketika menjalankan prosedur tersimpan tanpa parameter, kita hanya perlu memasukkan nama prosedur tersimpan untuk memanggil prosedur tersimpan yang sesuai, dan di database sqlserver, kita bisa langsung mengetikkan "nama prosedur tersimpan (daftar parameter) " di penganalisis kueri. Prosedur tersimpan dapat dijalankan dengan string seperti itu. Jadi, bisakah ide ini diterapkan ke aplikasi?
Jadi ketikkan kode yang sesuai di kompiler. Kode-kode ini dimodifikasi berdasarkan kode yang memanggil prosedur tersimpan tanpa parameter. Kode spesifiknya adalah sebagai berikut:
sqlconnection conn=koneksi sql baru("string koneksi");
sqldataadapter da = new sqldataadapter();
da.selectcommand = perintah sql baru();
da.selectcommand.connection = samb;
da.selectcommand.commandtext = "namaprosedur('para1','para2',para3)";
da.selectcommand.commandtype = commandtype.storedprocedure;
Untuk membuat kode lebih representatif, parameter pertama dan kedua dari prosedur tersimpan yang akan dipanggil bertipe string, dan parameter ketiga bertipe integer. Setelah eksekusi, saya menemukan bahwa hasil yang diharapkan dapat dicapai!
Perbandingan kedua metode pemanggilan Melalui perbandingan, kita dapat melihat bahwa metode kedua memiliki keunggulan yang jelas, yaitu dapat meningkatkan kecepatan pengembangan, menghemat waktu pengembangan, dan pemeliharaan kode yang mudah, serta mengurangi ukuran sistem. sampai batas tertentu. Namun, karena pemrosesan parameter prosedur tersimpan relatif umum, jika Anda ingin mendapatkan parameter keluaran atau mendapatkan nilai kembalian dari prosedur tersimpan, metode ini tidak dapat memenuhi kebutuhan. Meski begitu, metode ini memungkinkan pengembang menyimpan sebagian besar kodenya. Jika Anda tidak perlu mendapatkan parameter keluaran dan nilai kembalian, Anda hampir dapat melakukannya "sekali dan untuk selamanya". Oleh karena itu, dalam pengembangan program sebenarnya, metode ini masih mempunyai nilai praktis tertentu.