Pernyataan: Artikel ini telah diterbitkan dalam "Aplikasi Komputer" Volume 23 Edisi 11
Abstrak: Dalam pengembangan berbagai sistem, penggunaan prosedur tersimpan merupakan kebiasaan yang baik, yang tidak hanya menghadirkan fitur-fitur seperti tabel sementara, fungsi, dan kursor, tetapi juga Debugging, peningkatan, dan pemeliharaan menjadi mudah. Namun, hampir semua panggilan prosedur tersimpan berada dalam mode yang sama, dan perbedaan utamanya adalah parameter setiap prosedur tersimpan berbeda. Jadi, apakah mungkin menggunakan metode untuk menyatukan semua panggilan prosedur tersimpan dan mengurangi pemrograman yang tidak perlu? Berdasarkan studi database SQL Server dan ASP.NET, kami menerapkan metode pemanggilan terpadu. Metode ini hanya perlu memberikan nama prosedur tersimpan yang akan dipanggil, dan memberikan nilai parameter tertentu saat memanggil, sehingga tersimpan apa pun. prosedur dapat dipanggil.
Kata kunci: prosedur tersimpan, tabel sistem, tampilan struktur informasi, Kode identifikasi dokumen ADO.NET: ② Laporan pencapaian teknis praktik (teknologi), ringkasan pembelajaran teori dan praktik sosial (ilmu sosial)
Panggil prosedur tersimpan dengan cara yang sama di .NET
Abstrak: Menggunakan prosedur tersimpan adalah kebiasaan yang baik dalam mengembangkan proyek. Ini menyediakan tabel sementara, fungsi dan kursor, dan debugging, peningkatan, pemeliharaan juga dapat mengambil manfaat darinya. Namun, hampir semua pemanggilan ke prosedur tersimpan memiliki pola yang sama, yang utama Perbedaan di antara keduanya adalah parameter dari setiap prosedur tersimpan. Lalu, bisakah kita memanggil prosedur tersimpan dengan cara yang sama meskipun ada perbedaan dan mengurangi kode pemrograman. Kami melakukannya setelah mempelajari SQL Server dan .NET nama prosedur tersimpan dan nilai parameternya, Anda tidak perlu membuat parameternya sendiri. Kata kunci: Prosedur Stord, Tabel sistem, Skema Informasi, ADO.NET
Ringkasan: Dalam pengembangan suatu proyek, Anda sering memanggil prosedur tersimpan. Namun hampir semua pemanggilan prosedur tersimpan memiliki pola yang sama. Perbedaan utamanya terletak pada jenis dan nilai setiap parameter yang dibuat. Jadi, apakah mungkin memanggil semua prosedur tersimpan melalui satu fungsi (atau kelas)? Artikel ini mengimplementasikan metode pemanggilan terpadu berdasarkan prinsip penggunaan tabel sistem yang disediakan oleh database. Metode ini hanya perlu memberikan nama prosedur tersimpan yang akan dipanggil, dan memberikan nilai parameter tertentu saat memanggil, sehingga apa pun prosedur tersimpan dapat dipanggil.
Abstrak: Kita harus memanggil prosedur tersimpan dari sistem database selama pengembangan suatu proyek. Namun, memanggil prosedur tersimpan hampir sama, perbedaan utamanya adalah perbedaan antara jenis atau nilai parameter, dll. Bisakah kita memanggil prosedur tersimpan apa pun melaluinya? suatu fungsi (atau kelas)? Berdasarkan tabel sistem yang disediakan oleh sistem database, Kami menulis sebuah kelas untuk memanggil prosedur tersimpan apa pun dalam artikel ini. Untuk memanggil prosedur tersimpan, satu-satunya parameter yang Anda berikan adalah nama prosedur tersimpan dan nilai semua parameter prosedur tersimpan.
<Kelas DIV=teks4><B>1. Pendahuluan</B></DIV>
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]