Bagaimana memanggil Parameterized Stored Procedure dengan menggunakan ADO.NET dan Visual Basic .NET

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

Pada Halaman ini

Ringkasan

Ada beberapa cara untuk menggunakan ADO.NET untuk memanggil disimpan prosedur dan untuk mendapatkan kembali kembali nilai-nilai dan kembali parameter, termasuk:
  • Menggunakan DataSet objek untuk mengumpulkan baris kembali dan bekerja dengan baris ini di Selain kembali nilai-nilai dan parameter kembali.
  • Menggunakan objek hexadecimal untuk mengumpulkan kembali baris, yang bergerak melalui baris ini, dan untuk mengumpulkan kembali nilai-nilai dan kembali parameter.
  • Menggunakan metode ExecuteScalar untuk kembali nilai dari kolom pertama hasil ' baris pertama dengan nilai-nilai kembali dan parameter kembali. Hal ini paling berguna dengan fungsi agregat.
  • Menggunakan metode ExecuteNonQuery untuk kembali hanya parameter kembali dan kembali nilai-nilai. Setiap baris kembali dibuang. Hal ini paling berguna untuk mengeksekusi tindakan queries.
Artikel ini menunjukkan terakhir tiga metode dan menggunakan kedua SqlCommand dan OleDbCommand objek. Pastikan bahwa Anda menyalin kode untuk dikelola penyedia yang Anda gunakan. Jika Anda tidak yakin yang dikelola penyedia Anda harus menggunakan, kunjungi situs web Pusat Pengembang SharePoint berikut:
Penyedia data .NET
http://msdn.Microsoft.com/en-US/Library/a6cd7c08.aspx
Dalam setiap contoh dalam artikel ini, parameter ditambahkan parameter koleksi objek perintah . Bila Anda menggunakan objek SqlCommand , Anda tidak telah menambahkan parameter khususnya apapun order, tetapi parameter harus memiliki nama yang benar. Bila Anda menggunakan objek OleDbCommand , Anda harus menambahkan parameter dalam urutan menurun yang benar, dan Anda tidak dapat menggunakan parameter dengan nama.

Menggunakan hexadecimal untuk gulung balik baris dan parameter

Anda dapat menggunakan objek hexadecimal untuk kembali read-only, forward-only stream data. The informasi yang berisi hexadecimal dapat berasal dari prosedur tersimpan. Contoh ini menggunakan objek hexadecimal untuk menjalankan disimpan prosedur yang memiliki input dan output parameter dan kemudian bergerak melalui rekaman kembali untuk melihat kembali parameter.
  1. Membuat berikut prosedur tersimpan di server yang menjalankan Microsoft SQL Server:
    Create Procedure TestProcedure
      (
         @au_idIN varchar (11),
         @numTitlesOUT Integer OUTPUT
      )
    As
    
    select A.au_fname, A.au_lname, T.title 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    set @numTitlesOUT = @@Rowcount
    return (5) 
    					
  2. Menggunakan pernyataan impor pada sistem dan System.Data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Anda harus menggunakan pernyataan impor sebelum setiap Deklarasi lain. Pastikan untuk menyalin hanya kode untuk penyedia yang telah Anda pilih.SQL klien
    Imports System.Data.SqlClient					
    OLE DB penyedia Data
    Imports System.Data.OleDb					
  3. Tambahkan kode berikut untuk acara Form_Load :SQL klien
    Dim PubsConn As SqlConnection = New SqlConnection & _
        ("Data Source=server;integrated security=sspi;" & _
        "initial Catalog=pubs;")
    
    Dim testCMD As SqlCommand = New SqlCommand & _
        ("TestProcedure", PubsConn)
    
    testCMD.CommandType = CommandType.StoredProcedure
    
    Dim RetValue As SqlParameter = testCMD.Parameters.Add & _
        ("RetValue", SqlDbType.Int)
    RetValue.Direction = ParameterDirection.ReturnValue
    Dim auIDIN As SqlParameter = testCMD.Parameters.Add & _
        ("@au_idIN", SqlDbType.VarChar, 11)
    auIDIN.Direction = ParameterDirection.Input
    Dim NumTitles As SqlParameter = testCMD.Parameters.Add & _
        ("@numtitlesout", SqlDbType.Int)
    NumTitles.Direction = ParameterDirection.Output
    
    auIDIN.Value = "213-46-8915"
    PubsConn.Open()
    
    Dim myReader As SqlDataReader = testCMD.ExecuteReader()
    Console.WriteLine("Book Titles for this Author:")
    Do While myReader.Read
        Console.WriteLine("{0}", myReader.GetString(2))
    Loop
    myReader.Close()
            
    Console.WriteLine("Return Value: " & (RetValue.Value))
    Console.WriteLine("Number of Records: " & (NumTitles.Value))
    					
    OLE DB penyedia Data
    Dim PubsConn As OleDbConnection = New OleDbConnection & _
        ("Provider=sqloledb;Data Source=server;" & _
        "integrated security=sspi;initial Catalog=pubs;")
    
    Dim testCMD As OleDbCommand = New OleDbCommand & _
        ("TestProcedure", PubsConn)
    
    testCMD.CommandType = CommandType.StoredProcedure
    
    Dim RetValue As OleDbParameter = testCMD.Parameters.Add & _
        ("RetValue", OleDbType.Integer)
    RetValue.Direction = ParameterDirection.ReturnValue
    Dim auIDIN As OleDbParameter = testCMD.Parameters.Add & _
        ("@au_idIN", OleDbType.VarChar, 11)
    auIDIN.Direction = ParameterDirection.Input
    Dim NumTitles As OleDbParameter = testCMD.Parameters.Add & _
        ("@numtitlesout", OleDbType.Integer)
    NumTitles.Direction = ParameterDirection.Output
    
    auIDIN.Value = "213-46-8915"
    PubsConn.Open()
    
    Dim myReader As OleDbDataReader = testCMD.ExecuteReader()
    Console.WriteLine("Book Titles for this Author:")
    Do While myReader.Read
        Console.WriteLine("{0}", myReader.GetString(2))
    Loop
    myReader.Close()
    
    Console.WriteLine("Return Value: " & (RetValue.Value))
    Console.WriteLine("Number of Records: " & (NumTitles.Value))
    					
  4. Memodifikasi koneksi string untuk koneksi objek untuk menunjuk ke server yang menjalankan SQL Server.
  5. Menjalankan kode. Perhatikan bahwa hexadecimal mengambil catatan dan kemudian kembali nilai-nilai parameter. Anda dapat menggunakan metode membaca objek hexadecimal untuk bergerak melalui catatan kembali.

    Output jendela menampilkan judul dua buku, nilai kembali 5 dan output parameter, yang berisi jumlah catatan (2). Pemberitahuan bahwa Anda harus menutup hexadecimal dalam kode untuk melihat nilai parameter. Selain itu, perhatikan bahwa Anda tidak perlu bergerak melalui semua catatan untuk melihat kembali parameter Jika hexadecimal ditutup.

Menggunakan metode ExecuteScalar objek perintah

Anda dapat menggunakan metode ExecuteScalar objek perintah untuk mengambil nilai parameter. Selain itu, ExecuteScalar kembali kolom pertama dari baris pertama yang disimpan prosedur. Hal ini paling berguna untuk fungsi agregat seperti berikut contoh.
  1. Membuat berikut prosedur tersimpan di server yang menjalankan SQL Server:
    Create Procedure TestProcedure2
     (
       @au_idIN varchar (11)
      )
    As
    /* set nocount on */ 
    select count (T.title) 
    from authors as A join titleauthor as TA on
    A.au_id=TA.au_id
    join titles as T
    on T.title_id=TA.title_id
    where A.au_id=@au_idIN
    Return(5)
    					
  2. Menggunakan pernyataan impor pada sistem dan System.Data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Anda harus menggunakan pernyataan impor sebelum setiap Deklarasi lain. Pastikan bahwa Anda Salin hanya kode bagi penyedia yang telah Anda pilih.SQL klien
    Imports System.Data.SqlClient					
    OLE DB penyedia Data
    Imports System.Data.OleDb					
  3. Tambahkan kode berikut untuk acara Form_Load :SQL klien
    Dim PubsConn As SqlConnection = New SqlConnection & _
        ("Data Source=server;integrated security=sspi;" & _
        "initial Catalog=pubs;")
    
    Dim testCMD As SqlCommand = New SqlCommand & _
        ("TestProcedure2", PubsConn)
    
    testCMD.CommandType = CommandType.StoredProcedure
    
    Dim RetValue As SqlParameter = testCMD.Parameters.Add & _
        ("RetValue", SqlDbType.Int)
    RetValue.Direction = ParameterDirection.ReturnValue
    Dim auIDIN As SqlParameter = testCMD.Parameters.Add & _
        ("@au_idIN", SqlDbType.VarChar, 11)
    auIDIN.Direction = ParameterDirection.Input
    
    auIDIN.Value = "213-46-8915"
    PubsConn.Open()
    
    Dim intCount As Integer = testCMD.ExecuteScalar
    Console.WriteLine(intCount)
    Console.WriteLine("Return Value: " & (RetValue.Value))
    					
    OLE DB penyedia Data
    Dim PubsConn As OleDbConnection = New OleDbConnection & _
        ("Provider=SQLOLEDB;Data Source=server;" & _
        "integrated Security=sspi;initial catalog=pubs;")
    
    Dim testCMD As OleDbCommand = New OleDbCommand & _
        ("TestProcedure2", PubsConn)
    
    testCMD.CommandType = CommandType.StoredProcedure
    
    Dim RetVal As OleDbParameter = testCMD.Parameters.Add & _
        ("RetVal", OleDbType.Integer)
    RetVal.Direction = ParameterDirection.ReturnValue
    Dim IdIn As OleDbParameter = testCMD.Parameters.Add & _
        ("@au_idIN", OleDbType.VarChar, 11)
    IdIn.Direction = ParameterDirection.Input
    
    IdIn.Value = "213-46-8915"
            
    PubsConn.Open()
    
    Dim intCount As Integer = testCMD.ExecuteScalar
    
    Console.WriteLine("Number of Rows: " & intCount)
    Console.WriteLine(RetVal.Value)
    					
  4. Memodifikasi koneksi string untuk koneksi objek untuk menunjuk ke server yang menjalankan SQL Server.
  5. Menjalankan kode. Perhatikan bahwa metode ExecuteScalar objek perintah kembali parameter. ExecuteScalar juga gulung balik nilai kolom 1, baris 1 rowset kembali. Dengan demikian, nilai intCount adalah hasil dari fungsi menghitung dari yang disimpan prosedur.

Menggunakan metode ExecuteNonQuery objek perintah

Sampel ini menggunakan metode ExecuteNonQuery untuk menjalankan query dan kembali nilai-nilai parameter. ExecuteNonQuery juga gulung balik jumlah record yang terpengaruh setelah menjalankan query. Namun, ExecuteNonQuery tidak kembali setiap baris atau kolom dari yang disimpan prosedur.

ExecuteNonQuery metode ini paling berguna bila Anda menggunakan INSERT, UPDATE, atau menghapus pernyataan jika Anda hanya perlu tahu berapa banyak baris yang berubah. Di disimpan prosedur di mana Anda menggunakan hanya sebuah pilih pernyataan, Anda menerima -1 karena baris tidak dipengaruhi oleh query.
  1. Membuat berikut prosedur tersimpan di server yang menjalankan SQL Server:
    Create Procedure TestProcedure3
      (
    	@au_idIN varchar (11),
    	@au_fnam varchar (30)
      )
    
    As
    /* set nocount on */ 
    Update authors set au_fname = @au_fnam
    where au_id = @au_idin	
    return (5)
    					
  2. Menggunakan pernyataan impor pada sistem dan System.Data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Anda harus menggunakan pernyataan impor sebelum setiap Deklarasi lain. Pastikan bahwa Anda Salin hanya kode bagi penyedia yang telah Anda pilih.SQL klien
    Imports System.Data.SqlClient					
    OLE DB penyedia Data
    Imports System.Data.OleDb					
  3. Tambahkan kode berikut untuk acara Form_Load :SQL klien
    Dim PubsConn As SqlConnection = New SqlConnection & _
        ("Data Source=server;integrated security=sspi;" & _
        "initial Catalog=pubs;")
    
    Dim testCMD As SqlCommand = New SqlCommand & _
        ("TestProcedure3", PubsConn)
    
    testCMD.CommandType = CommandType.StoredProcedure
    
    Dim RetValue As SqlParameter = testCMD.Parameters.Add & _
        ("RetValue", SqlDbType.Int)
    RetValue.Direction = ParameterDirection.ReturnValue
    Dim auIDIN As SqlParameter = testCMD.Parameters.Add & _
        ("@au_idIN", SqlDbType.VarChar, 11)
    auIDIN.Direction = ParameterDirection.Input
    Dim auFname As SqlParameter = testCMD.Parameters.Add & _
        ("@au_fnam", SqlDbType.VarChar, 30)
    auFname.Direction = ParameterDirection.Input
    
    auIDIN.Value = "213-46-8915"
    auFname.Value = "Marjorie"
    PubsConn.Open()
    
    Dim rvRows As Integer = testCMD.ExecuteNonQuery
    Console.WriteLine(rvRows)
    Console.WriteLine(RetValue.Value)
    					
    OLE DB penyedia Data
    Dim PubsConn As OleDbConnection = New OleDbConnection & _
        ("Provider=SQLOLEDB;Data Source=server;" & _
        "integrated Security=sspi;initial catalog=pubs;")
    
    Dim testCMD As OleDbCommand = New OleDbCommand & _
        ("TestProcedure3", PubsConn)
    
    testCMD.CommandType = CommandType.StoredProcedure
    
    Dim RetVal As OleDbParameter = testCMD.Parameters.Add & _
        ("RetVal", OleDbType.Integer)
    RetVal.Direction = ParameterDirection.ReturnValue
    Dim IdIn As OleDbParameter = testCMD.Parameters.Add & _
        ("@au_idIN", OleDbType.VarChar, 11)
    IdIn.Direction = ParameterDirection.Input
    Dim FnameIn As OleDbParameter = testCMD.Parameters.Add & _
        ("@au_fname", OleDbType.VarChar, 30)
    FnameIn.Direction = ParameterDirection.Input
    
    IdIn.Value = "213-46-8915"
    FnameIn.Value = "Marjorie"
    
    PubsConn.Open()
    
    Dim intRowAffected As Integer = testCMD.ExecuteNonQuery
    
    Console.WriteLine("Number of Rows affected: " & intRowAffected)
    Console.WriteLine(RetVal.Value)
    					
  4. Memodifikasi koneksi string untuk koneksi objek untuk menunjuk ke server yang menjalankan SQL Server.
  5. Menjalankan kode. Jendela Output menampilkan jumlah terpengaruh baris (intRowAffect) dan nilai parameter kembali.

Referensi

Untuk informasi tambahan, kunjungi website MSDN berikut situs:
Pengenalan Perpustakaan kelas .NET Framework
http://msdn.Microsoft.com/en-US/Library/hfa3fa08.aspx

Mengambil Data menggunakan hexadecimal
http://msdn.Microsoft.com/en-US/Library/haa3afyz.aspx
Untuk informasi lebih lanjut, lihat Training Microsoft berikut & Kursus sertifikasi:
2389 Pemrograman dengan ADO.NET
http://www.Microsoft.com/Learning/syllabi/en-US/2389Bfinal.mspx

Properti

ID Artikel: 308049 - Kajian Terakhir: 30 Mei 2013 - Revisi: 3.0
Berlaku bagi:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Kata kunci: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB308049 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: 308049

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