ID Artikel: 308049 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

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

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Ada beberapa cara untuk menggunakan ADO.NET untuk memanggil disimpan prosedur dan untuk mendapatkan kembali kembali nilai-nilai dan kembali parameter, termasuk:
  • Penggunaan DataSet objek untuk mengumpulkan baris kembali dan bekerja dengan baris ini di Selain kembali nilai-nilai dan parameter kembali.
  • Penggunaan Hexadecimal objek untuk mengumpulkan baris kembali, untuk bergerak melalui baris ini, dan untuk mengumpulkan kembali nilai-nilai dan kembali parameter.
  • Penggunaan ExecuteScalar metode untuk kembali nilai dari kolom pertama hasil' baris pertama dengan kembali nilai-nilai dan parameter kembali. Ini paling berguna dengan fungsi agregat.
  • Penggunaan ExecuteNonQuery metode untuk kembali hanya parameter kembali dan kembali nilai-nilai. Setiap baris kembali dibuang. Ini paling berguna untuk mengeksekusi tindakan queries.
Artikel ini menunjukkan metode 3 dan menggunakan kedua The SqlCommand dan OleDbCommand objek. Pastikan bahwa Anda Salin hanya kode untuk dikelola penyedia yang Anda gunakan. Jika Anda tidak yakin yang dikelola penyedia Anda harus menggunakan, kunjungi Website Jaringan Pengembang Microsoft berikut:
.Penyedia NET Data
http://MSDN.Microsoft.com/en-us/library/a6cd7c08.aspx (http://msdn.microsoft.com/en-us/library/a6cd7c08.aspx)
Dalam setiap contoh dalam artikel ini, parameter ditambahkan untuk Parameter Koleksi Perintah objek. Ketika Anda menggunakan SqlCommand objek, Anda tidak telah menambahkan parameter khususnya apapun Order, tetapi parameter harus memiliki nama yang benar. Ketika Anda menggunakan OleDbCommand objek, Anda harus menambahkan parameter dalam urutan yang benar, dan Anda tidak dapat menggunakan parameter dengan nama.

Menggunakan hexadecimal kembali baris dan parameter

Anda dapat menggunakan Hexadecimal objek untuk kembali read-only, ke depan hanya aliran data. The informasi yang Hexadecimal berisi dapat datang dari prosedur yang disimpan. Contoh ini menggunakan Hexadecimal objek untuk menjalankan prosedur yang disimpan yang memiliki input dan output parameter dan kemudian bergerak melalui catatan kembali untuk melihat kembali parameter.
  1. Membuat prosedur berikut disimpan pada 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. Penggunaan Impor pernyataan di Sistem dan System.data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Anda harus menggunakan Impor pernyataan sebelum deklarasi lain. Pastikan untuk menyalin hanya kode untuk selular yang telah Anda pilih.SQL klien
    Imports System.Data.SqlClient					
    OLE DB Data Provider
    Imports System.Data.OleDb					
  3. Tambahkan kode berikut untuk Form_Load acara: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 Data Provider
    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 rangkaian sambungan untuk Sambungan objek untuk menunjuk ke server yang menjalankan SQL Server.
  5. Jalankan kode. Perhatikan bahwa Hexadecimal mengambil catatan dan kemudian mengembalikan nilai parameter. Anda dapat menggunakan Baca metode Hexadecimal objek untuk bergerak melalui catatan kembali.

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

Menggunakan metode ExecuteScalar objek perintah

Anda dapat menggunakan ExecuteScalar metode Perintah objek untuk mengambil nilai parameter. Selain itu, ExecuteScalar kembali kolom pertama baris pertama yang disimpan prosedur. Ini paling berguna untuk agregat fungsi seperti dalam berikut contoh.
  1. Membuat prosedur berikut disimpan pada 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. Penggunaan Impor pernyataan di Sistem dan System.data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Anda harus menggunakan Impor pernyataan sebelum deklarasi lain. Pastikan bahwa Anda Salin hanya kode untuk selular yang telah Anda pilih.SQL klien
    Imports System.Data.SqlClient					
    OLE DB Data Provider
    Imports System.Data.OleDb					
  3. Tambahkan kode berikut untuk Form_Load acara: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 Data Provider
    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 rangkaian sambungan untuk Sambungan objek untuk menunjuk ke server yang menjalankan SQL Server.
  5. Jalankan kode. Perhatikan bahwa ExecuteScalar metode Perintah objek kembali parameter. ExecuteScalar juga mengembalikan nilai kolom 1, baris 1 rowset kembali. Dengan demikian, nilai intCount adalah hasil dari fungsi Bangsawan dari yang disimpan prosedur.

Menggunakan metode ExecuteNonQuery objek perintah

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

The ExecuteNonQuery metode paling berguna ketika Anda menggunakan INSERT, UPDATE atau DELETE pernyataan jika Anda hanya perlu tahu berapa banyak baris diubah. Dalam disimpan prosedur di mana Anda menggunakan hanya pilih pernyataan, Anda menerima-1 karena tidak ada baris dipengaruhi oleh permintaan.
  1. Membuat prosedur berikut disimpan pada 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. Penggunaan Impor pernyataan di Sistem dan System.data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Anda harus menggunakan Impor pernyataan sebelum deklarasi lain. Pastikan bahwa Anda Salin hanya kode untuk selular yang telah Anda pilih.SQL klien
    Imports System.Data.SqlClient					
    OLE DB Data Provider
    Imports System.Data.OleDb					
  3. Tambahkan kode berikut untuk Form_Load acara: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 Data Provider
    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 rangkaian sambungan untuk Sambungan objek untuk menunjuk ke server yang menjalankan SQL Server.
  5. Jalankan kode. Jendela Output menampilkan jumlah terkena baris)intRowAffect) dan nilai parameter kembali.

REFERENSI

Untuk informasi tambahan, kunjungi Website MSDN berikut situs:
Pengenalan.NET Framework kelas perpustakaan
http://MSDN.Microsoft.com/en-us/library/hfa3fa08.aspx (http://msdn.microsoft.com/en-us/library/hfa3fa08.aspx)

Mengambil Data hexadecimal
http://MSDN.Microsoft.com/en-us/library/haa3afyz.aspx (http://msdn.microsoft.com/en-us/library/haa3afyz.aspx)
Untuk lebih banyak informasi umum tentang ADO.NET atau Visual Basic.NET, Kunjungi newsgroup MSDN berikut:
Microsoft.Public.DotNet.Framework.adonet (http://msdn.microsoft.com/newsgroups/default.aspx?query=microsoft.public.dotnet.framework.adonet&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)

Microsoft.Public.DotNet.Languages.VB (http://msdn.microsoft.com/newsgroups/default.aspx?query=microsoft.public.dotnet.languages.vb&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)
Untuk selengkapnya, lihat Microsoft berikut pelatihan & Kursus sertifikasi:
2389 Pemrograman dengan ADO.NET
http://www.Microsoft.com/Learning/syllabi/en-US/2389Bfinal.mspx (http://www.microsoft.com/learning/syllabi/en-us/2389Bfinal.mspx)

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 MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:308049  (http://support.microsoft.com/kb/308049/en-us/ )