Beranda>Tutorial Pemrograman Jaringan>Tutorial ASP.NET

Metode pemanggilan prosedur tersimpan terpadu di net

Penulis:Eve Cole Waktu Pembaruan:2009-07-01 16:45:17

Dalam pengembangan berbagai sistem, menggunakan prosedur tersimpan adalah kebiasaan yang baik. Ini tidak hanya menghadirkan fitur-fitur seperti tabel sementara, fungsi, dan kursor, tetapi juga membuat proses debug, peningkatan, dan pemeliharaan menjadi lebih mudah. Selama proses penyimpanan, data dapat diproses dan kemudian dikembalikan, yang dapat memberikan lebih banyak analisis dan kontrol terhadap data. Dalam panggilan prosedur tersimpan, kami menemukan bahwa panggilan prosedur tersimpan hampir mengikuti pola berikut:

1. Deklarasikan SqlConnection
2. Deklarasikan SqlCommand, dan setel properti Connection ke instance SqlConnection yang baru saja dideklarasikan, setel CommandName ke nama prosedur tersimpan, dan CommandType ke prosedur tersimpan.
3. Tambahkan semua parameter yang diperlukan untuk panggilan prosedur tersimpan ke kumpulan Parameter dari instance SqlCommand yang baru saja dideklarasikan 4. Panggil metode ExecuteReader() dari SqlCommand untuk mendapatkan kumpulan baris yang dikembalikan oleh prosedur tersimpan.
4. Deklarasikan SqlDataAdapter dan DataSet, atur properti SelectCommand dari SqlDataAdapter ke instance yang dideklarasikan di 3, lalu panggil metode Isi untuk mengisi kumpulan baris yang dikembalikan ke dalam DataSet.
5. Tutup objek SqlConnection
6. Lepaskan setiap contoh objek yang dideklarasikan (Catatan: 4 mengacu pada dua metode ekstraksi data). Selama proses panggilan ini, kami menemukan bahwa hampir semua panggilan prosedur tersimpan berada dalam mode ini. Perbedaannya terletak pada penyimpanan pada langkah 2. Nama proses yang berbeda berbeda dari parameter yang digunakan dalam setiap pemanggilan prosedur tersimpan pada langkah 3. Parameter tersebut memiliki perbedaan dalam nama parameter, arah, tipe data, panjang, dll. Jadi, apakah ada cara untuk mengimplementasikan semua panggilan prosedur tersimpan? Artinya, Anda hanya perlu memberikan nama prosedur tersimpan, lalu meneruskan nilai parameter ke dalam metode pemanggilan untuk merealisasikan panggilan prosedur tersimpan, lalu menggunakan struktur data tertentu untuk menyimpan kumpulan baris yang dikembalikan, nilai parameter keluar, dan nilai pengembalian proses. Setelah mempelajari tabel sistem SQL Server, kami menemukan bahwa ide ini layak dilakukan.

2. Tabel sistem dan tampilan struktur informasi
Basis data relasional seperti SQL Server menyimpan metadata dalam basis data dengan cara tertentu. Di SQL Server, ini adalah basis data sistem dan tabel sistem. Setelah menginstal SQL Server, empat database sistem akan dibuat secara otomatis: master, model, msdb, dan tempdb. Basis data master adalah gudang semua informasi tingkat sistem di SQL Server. Akun login, pengaturan konfigurasi, prosedur tersimpan sistem, dan keberadaan database lainnya dicatat dalam database master. Basis data msdb menyimpan informasi Agen Server SQL. Ketika pekerjaan, operator dan peringatan ditentukan, mereka disimpan di msdb. model adalah templat untuk semua database yang dibuat pengguna. Saat membuat database baru, salin model dan buat objek yang diperlukan. tempdb menyimpan objek sementara di SQL Server. Menampilkan tabel sementara yang dihasilkan dan prosedur tersimpan sementara serta objek sementara yang dihasilkan sistem semuanya menggunakan tempdb. [1] Dan setiap database memiliki tabel sistemnya sendiri. Tabel sistem ini digunakan untuk menyimpan konfigurasi dan informasi objek. Dari tabel sistem ini, kita dapat memperoleh informasi tentang seluruh parameter dari setiap prosedur tersimpan. Informasi ini disimpan dalam tabel syscolumns. Ada nama parameter, tipe, panjang, arah, dll. yang perlu digunakan dalam metode kita. Namun, bidang dalam tabel sistem akan berubah seiring dengan versi SQL Server. Misalnya, type dan xtype di syscolumns adalah contoh perubahan tersebut. Untuk menyesuaikan metode kita dengan perubahan versi SQL Server, kita perlu menggunakan tampilan struktur informasi. ANSI-92 mendefinisikan tampilan struktur informasi sebagai sekumpulan tampilan yang menyediakan data sistem. Dengan memanfaatkan tampilan ini, Anda dapat menyembunyikan tabel sistem sebenarnya dari aplikasi Anda. Perubahan pada tabel sistem tidak akan mempengaruhi aplikasi, sehingga aplikasi dapat independen terhadap vendor dan versi database. [1] Dukungan ANSI-92 dan SQL Server menggunakan struktur penamaan tiga segmen untuk mereferensikan objek di server lokal. Terminologi ANSI-92 disebut catalog.schema.object, sedangkan SQL Server menyebutnya database.owner.object. [1] Misalnya, jika kita ingin mencari semua informasi parameter dari semua prosedur tersimpan, kita dapat menggunakan: pilih * dari INFORMATION_SCHEMA.PARAMETERS. Jika kita ingin mencari semua informasi parameter dari prosedur tersimpan tertentu, itu adalah: pilih * dari INFORMATION_SCHEMA.PARAMETERS di mana SPECIFIC_NAME ='Proc1 ' Dengan tampilan struktur informasi, lebih dari separuh masalah kita telah terpecahkan. Selanjutnya kita melihat bagaimana mengimplementasikan metode kita di .NET.

3. Fokus metode implementasi adalah bagaimana memperoleh semua informasi parameter dari prosedur tersimpan berdasarkan namanya, dan kemudian secara otomatis membuat setiap parameter berdasarkan informasi parameter tersebut. Untuk mengotomatiskan tindakan ini, proses mendeklarasikan SqlConnection, SqlCommand, dan SqlParameter, serta proses pembuatan setiap SqlParameter harus tidak terlihat oleh pengguna. Satu-satunya hal yang perlu diberikan oleh pengguna adalah nama prosedur tersimpan, dan kemudian memberikan berbagai parameter saat memanggil, dan bahkan tipenya tidak perlu diberikan.

3.1 Mendapatkan dan membuat parameter dari prosedur tersimpan Cara mendapatkan dan membuat parameter dari prosedur tersimpan yang akan dipanggil adalah poin kuncinya. Kita dapat secara otomatis mengimplementasikan langkah ini melalui tampilan struktur informasi.
// Dapatkan dan buat parameter prosedur tersimpan

private void GetProcedureParameter(params objek[] parameter)

{ SqlCommand myCommand2 = new SqlCommand(

)

;

= '" + this.ProcedureName + "' diurutkan berdasarkan ORDINAL_POSITION";

SqlDataReader reader = null; reader = myCommand2.ExecuteReader(); // Buat parameter pengembalian

myParameter = new SqlParameter();

myParameter.ParameterName = "@Value";

myParameter .SqlDbType = SqlDbType.Int;

myParameter.Direction = ParameterDirection.ReturnValue;

myCommand.Parameters.Add(myParameter);

// Membuat setiap parameter

while(pembaca.Baca())

{

myParameter = new SqlParameter();

myParameter.ParameterName = pembaca["PARAMETER_NAME"].ToString();

myParameter.Direction = pembaca["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;

switch(reader["DATA_TYPE"].ToString()) {

case "int" :

if(myParameter.Direction == ParameterDirection.Input)

myParameter.Value = (int)parameter[i] ;

myParameter.SqlDbType = SqlDbType.Int;

break

; //...banyak pemrosesan tipe tertentu dihilangkan

default : break;

i

++

;


3.2 Kumpulan data hasil pengembalian, nilai kembalian, dan kumpulan parameter keluar. Setelah membuat parameter dari prosedur tersimpan, kita dapat memanggil prosedur tersimpan. Karena di .NET, kelas yang umum digunakan yang mengembalikan kumpulan hasil adalah SqlDataReader dan DataSet, dan SqlDataReader hanya dapat digunakan sambil mempertahankan koneksi, namun DataSet tidak. Dalam implementasi kami, koneksi harus diputuskan setelah panggilan, sehingga DataSet digunakan untuk menyimpan kumpulan hasil yang dikembalikan.


public SqlResult Call(params object[] parameter){ // SqlResult adalah kelas yang ditentukan sendiri yang digunakan untuk menyimpan kumpulan data hasil, nilai kembalian, dan kumpulan parameter keluar. SqlResult result = new SqlResult(); // Tentukan koneksi Anda sendiri sebagai diperlukan String

myConnection = new SqlConnection(ConnectionString);

myCommand = new SqlCommand(this.ProcedureName, myConnection);

myCommand.CommandType

= CommandType.StoredProcedure

; // Dapatkan dan buat Simpan parameter prosedur dan atur nilainya

GetProcedureParameter(parameters);

myAdapter.Fill(result.dataSet, "Table"); // Dapatkan nilai parameter keluar dan pasangan nama dari prosedur tersimpan dan simpan dalam Hashtable

GetOutputValue(

result

) ; // Lepaskan berbagai sumber daya di sini dan putuskan sambungan

myConnection.Dispose

(

)

;


4. Pekerjaan lebih lanjut Meskipun implementasi kami di sini adalah untuk database SQL Server, metode ini dapat digunakan untuk database apa pun yang menyediakan tampilan struktur informasi, mematuhi standar ANSI-92, atau menyediakan metadata. Kami merangkumnya ke dalam kelas SqlProcedure, dan prosedur tersimpan dapat dengan mudah dipanggil saat diperlukan, sehingga mengurangi banyak pekerjaan kode yang pada dasarnya berulang. Agar kelas SqlProcedure mendukung lebih banyak tipe data, dalam metode GetProcedureParameter(), Anda perlu menganalisis tipe, arah, panjang, nilai default, dan informasi lain dari setiap parameter sesuai dengan kebutuhan Anda, lalu membuat parameter ini. Pada dasarnya tipe apa pun bisa diimplementasikan, bahkan tipe gambar pun bisa dibuat dengan cara ini. Dengan cara ini kelas bisa menjadi sangat umum dan berguna dalam proyek apa pun.

Referensi
[1] Ray Rankins, Paul Jensen, Paul Bertucci, Buku Praktis SQL Server 2000, Beijing: Electronic Industry Press, 2002
[2] Perpustakaan MSDN Januari 2003, Microsoft Corporation.

Tentang penulis: Liu Zhibo (1979-), pria, dari Xinhua, Hunan, gelar master, arahan penelitian utama: jaringan saraf dan pengenalan pola, sistem informasi otomasi kantor
email:[email protected]