CARA: Kembali kesalahan dan peringatan dari SQL Server disimpan prosedur dalam ADO.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 321903 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

Ringkasan

Artikel ini menjelaskan cara menampilkan kedua SQL Server kesalahan dan peringatan di ADO.NET. Jika saudara membesarkan kesalahan yang memiliki tingkat keparahan 10 atau kurang, yang merupakan peringatan, tidak terkecuali dibesarkan. Peringatan ini bukanlah diisikan ke SqlErrorCollection. Sebaliknya Anda harus hook ke acara InfoMessage objek koneksi dan menangani pesan yang ada.

Kesalahan dalam SQL prosedur tersimpan dengan tingkat keparahan 11 melalui 20 melempar kesalahan dalam SQL yang tertangkap di SqlErrorCollection. Juga mencatat bahwa beberapa kesalahan yang memiliki tingkat keparahan 11 atau lebih besar abort seluruh disimpan prosedur.


Persyaratan

Daftar berikut menguraikan fitur peranti penangkap keras, peranti penangkap lunak, infrastruktur jaringan, dan Service Pack yang diperlukan:
  • Microsoft Visual Studio .NET diinstal pada kompatibel sistem operasi Microsoft Windows
  • SQL server dengan sampel Northwind database diinstal
Artikel ini mengasumsikan bahwa Anda sudah familiar dengan berikut topik:
  • Visual Basic .NET
  • Akses data ADO.NET

Membuat proyek dan menambahkan prosedur tersimpan di SQL Server

Contoh berikut menggunakan kombinasi Sev 10 dan Sev 11 kesalahan untuk menunjukkan bagaimana Anda dapat menggunakan ADO.NET untuk menampilkan pesan kesalahan dengan tingkat keparahan berbeda. Sampel ini juga menunjukkan bagaimana Anda dapat menggunakan jika...ELSE logika dalam kombinasi dengan RAISERROR untuk memberikan kesalahan penanganan di SQL disimpan prosedur.

Sampel melakukan pencarian sederhana di atas tabel atak pelanggan di Database SQL Server Northwind. Jika salah satu CustomerIDs tidak ditemukan, SEV 10 pengecualian dibesarkan. Jika kedua CustomerIDs tidak ditemukan, SEV 11 pengecualian yang dibangkitkan, dan aborts prosedur tersimpan. Perhatikan bahwa Anda harus menambahkan Handler untuk tautan langsung ke acara InfoMessage objek koneksi untuk menampilkan kesalahan yang memiliki tingkat keparahan 10 atau kurang.
  1. Ikuti langkah-langkah untuk membuat Visual Basic Windows baru Proyek aplikasi:
    1. Mulai Visual Studio .NET.
    2. Pada berkas menu, titik baru, dan kemudian klik proyek.
    3. Dalam Proyek baru kotak dialog, klik Visual Basic proyek di bawah Jenis proyek, klik Aplikasi Windows di bawah template, dan kemudian klik OK.
  2. Dalam Server Explorer, mengkonfigurasi sambungan data baru untuk Northwind sampel database SQL Server tersedia.
  3. Memperluas node Northwind database , klik kanan-atas prosedur tersimpan, dan kemudian klik New prosedur tersimpan.
  4. Di jendela kode Anda disimpan prosedur, paste Kode disimpan prosedur berikut:
    CREATE proc GetCustomers 
    @CustomerID1 nvarchar (5),
    @CustomerID2 nvarchar (5)
    AS
    DECLARE @err_message nvarchar(255)
    
    --if no customers found return SEV 11 error to abort stored procedure
    IF NOT EXISTS (Select CustomerID from Customers where CustomerID = @CustomerID1 or CustomerID =  @CustomerID2) 
    	BEGIN	
    	SET @err_message = @CustomerID1 + ' and ' + @CustomerID2 + ' Not found raise sev 11'
    	RAISERROR (@err_message, 11,1)
    	END
    
    --if 1st customerid not found throw SEV 10 exception
    IF EXISTS (Select CustomerID from Customers where CustomerID = @CustomerID1)
    	BEGIN
    	select * from Customers where CustomerID = @CustomerID1
    	END
    ELSE
    	BEGIN
    	SET @err_message = @CustomerID1 + ' not found raise sev 10'
                 RAISERROR (@err_message,10, 1) 	
    	END
    
    --if 2nd customerid not found throw SEV 10 exception
    IF EXISTS (select * from Customers where CustomerID = @CustomerID2)
    	BEGIN
    	select * from Customers where CustomerID = @CustomerID2
    	END
    ELSE
    	BEGIN
    	SET @err_message = @CustomerID2 +  ' not found raise sev 10'
        	RAISERROR (@err_message,10, 1) 
    	END
  5. Tutup jendela kode prosedur tersimpan, dan kemudian klik ya untuk menyimpan perubahan.

Menambahkan kode untuk menampilkan kesalahan dan peringatan

  1. Di jendela kode Form1, atau Anda Visual Basic .NET proyek, menambahkan referensi ke System.Data.SQLClient dengan menambahkan baris berikut ke bagian atas dari Form1.vb file:
    Imports System.Data.SqlClient
    					
  2. Tarik 2 TextBox kontrol (TextBox1 dan TextBox2) dari toolbox untuk Form1.
  3. Tekan F4 untuk mengubah properti teksTextBox1 untuk ALFKI.
  4. Tekan F4 untuk mengubah properti teksTextBox2 untuk ANATR.
  5. Drag Button control (Button1) dari toolbox untuk Form1, dan kemudian tekan F4 untuk mengubah properti teks untuk Cari.
  6. klik ganda Button1, dan kemudian tambahkan kode berikut untuk Button1_Click event handler:

    Catatan Anda harus mengubah User ID <username> nilai dan password = nilai<strong password=""> ke nilai yang benar sebelum Anda menjalankan ini kode. Pastikan bahwa ID pengguna memiliki izin yang sesuai untuk melakukan ini operasi pada database.</strong> </username>
            Try
                Dim cn As New SqlConnection("Server=servername;Database=Northwind;User Id=<username>;Password=<strong password>")
                AddHandler cn.InfoMessage, AddressOf cn_InfoMessage
    
                cn.Open()
                Dim cmd As New SqlCommand("GetCustomers")
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Connection = cn
    
                cmd.Parameters.Add(New SqlParameter("@CustomerID1", SqlDbType.NVarChar, 5))
                cmd.Parameters.Add(New SqlParameter("@CustomerID2", SqlDbType.NVarChar, 5))
    
                cmd.Parameters("@CustomerID1").Value = TextBox1.Text
                cmd.Parameters("@CustomerID2").Value = TextBox2.Text
    
                Dim myReader As SqlDataReader = cmd.ExecuteReader()
                Dim RecordCount As Integer = 0
    
                'You must check the nextresult method because there is a possiblity that the
                'stored procedure may return multiple resultsets; the NextResult method
                'positions the DataReader at the next result in the resultset if you 
                'have multiple results, otherwise it will return false.
                Do
                Do while myreader.read()
                Debug.WriteLine("Found customer ID : " & myReader(0))
                Loop
                Loop While myreader.NextResult()
    
                myReader.Close()
    
            Catch SqlEx As SqlException
                Dim myError As SqlError
                            Debug.WriteLine("Errors Count:" & SqlEx.Errors.Count)
                For Each myError In SqlEx.Errors
                    Debug.WriteLine(myError.Number & " - " & myError.Message)
                Next
            End Try
    					
  7. Memodifikasi koneksi string untuk menunjuk ke Northwind database pada SQL server.
  8. Untuk menampilkan kesalahan yang memiliki tingkat keparahan tingkat 10 atau kurang, Tambahkan sub berikut untuk menangani acara InfoMessage :
        Public Sub cn_InfoMessage(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlInfoMessageEventArgs)
            Debug.WriteLine("info message event: " & e.Message)
        End Sub
    					
  9. Tekan CTRL + F5 untuk menjalankan program. Klik Button1 dan melihat di jendela Output bahwa Anda tidak melihat CustomerIDs ALFKI dan ANATR. Untuk memastikan bahwa Output jendela terlihat, tekan CTRL + ALT + O.

Menghasilkan dan menangani SEV 10 peringatan

Mengubah nilai di TextBox1 dari ALFKI untuk AAAAA, dan kemudian klik Button1 untuk mencoba untuk memilih nilai yang tidak ada di pelanggan database. kode galat kustom dalam prosedur tersimpan perangkap skenario ini dan menimbulkan pengecualian SEV 10. Anda melihat bahwa pengecualian SEV 10 dibesarkan dan ditampilkan dengan menggunakan peristiwa InfoMessage objek Connection . Pesan galat yang memiliki tingkat keparahan tingkat 10 atau kurang diperlakukan sebagai informasi pesan, dan tidak kembali sebagai kesalahan atau di hasil query.

Menghasilkan dan menangani SEV 11 pengecualian

TextBox1 mengubah nilai dari ALFKI untuk AAAAA, dan di TextBox2, mengubah nilai dari ANATR untuk AAAAA, dan kemudian klik Button1. Ini tidak menemukan nilai-nilai kedua dalam database pelanggan, dan prosedur tersimpan menimbulkan pengecualian SEV 11. Anda sekarang melihat kesalahan SEV 11 di SQLErrorCollection dengan pesan kesalahan kustom Anda.

Referensi

Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel Pangkalan Pengetahuan Microsoft:
308049 CARA: Memanggil Parameterized Stored Procedure dengan menggunakan ADO.NET dan Visual Basic .NET
309490 CARA: Menangani beberapa hasil dengan menggunakan hexadecimal dalam Visual Basic .NET
316549 CARA: Debug disimpan prosedur dalam Visual Studio .NET
321902 CARA: Panggilan prosedur tersimpan dengan nilai-nilai opsional ADO.NET
308051 PRB: Output parameter tidak dikembalikan ketika Anda menjalankan perintah ADO.NET dalam Visual Basic .NET

Properti

ID Artikel: 321903 - Kajian Terakhir: 28 Juni 2013 - Revisi: 3.0
Berlaku bagi:
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft ADO.NET 1.1
Kata kunci: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB321903 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.
Klik disini untuk melihat versi Inggris dari artikel ini: 321903

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com