CARA: Memanggil Parameterized Stored Procedure dengan menggunakan ADO.NET dan Visual C#.NET

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

Pada Halaman ini

RINGKASAN

Ada beberapa cara untuk menggunakan ADO.NET untuk memanggil stored procedure dan untuk mendapatkan kembali kembali nilai-nilai dan kembali parameter, termasuk:
  • Menggunakan objek DataSet untuk mengumpulkan baris kembali dan bekerja dengan baris ini selain untuk kembali nilai-nilai dan parameter kembali.
  • Menggunakan objek hexadecimal untuk mengumpulkan baris kembali, untuk bergerak melalui baris ini, dan kemudian berkumpul kembali nilai-nilai dan parameter kembali.
  • Menggunakan metode ExecuteScalar untuk gulung balik nilai dari kolom pertama dari baris pertama hasil dengan kembali nilai-nilai dan parameter kembali. Ini paling berguna dengan fungsi agregat.
  • Menggunakan metode ExecuteNonQuery untuk kembali hanya parameter kembali dan kembali nilai-nilai. Setiap baris kembali dibuang. Ini paling berguna untuk mengeksekusi query tindakan.
Artikel ini menunjukkan metode tiga terakhir dan menggunakan SqlCommand dan OleDbCommand objek. Pastikan bahwa Anda Salin hanya kode bagi penyedia dikelola yang Anda gunakan. Jika Anda tidak yakin yang dikelola penyedia harus Anda gunakan, kunjungi berikut Website Jaringan Pengembang Microsoft:
.Penyedia NET Data
Dalam setiap contoh dalam artikel ini, parameter ditambahkan ke koleksi parameter objek perintah . Bila Anda menggunakan SqlCommand objek, Anda tidak telah menambahkan parameter dalam urutan menurun tertentu, tetapi parameter harus memiliki nama yang benar. Bila Anda menggunakan OleDbCommand objek, 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 kembali read-only, ke depan hanya alur data. Informasi yang hexadecimal berisi dapat datang dari prosedur yang disimpan. Contoh ini menggunakan objek hexadecimal 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. Buat baru Visual C#.NET aplikasi Windows proyek.
  3. Menggunakan menggunakan pernyataan pada sistem dan System.Data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Menambahkan kode ini ke atas kode Formulir modul. Pastikan untuk menyalin hanya kode untuk selular yang telah Anda pilih.SQL klien
    using System.Data.SqlClient;
    					
    OLE DB Data Provider
    using System.Data.OleDb;
    					
  4. Ganti kode dalam acara Form_Load swasta dengan kode berikut:SQL klien
    SqlConnection PubsConn = new SqlConnection 
    ("Data Source=server;integrated " + 
    "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
    ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
      ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", SqlDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output ;
            
    IdIn.Value = "213-46-8915";
    PubsConn.Open();
    
    SqlDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    OLE DB Data Provider
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter NumTitles = testCMD.Parameters.Add 
       ("@numtitlesout", OleDbType.VarChar, 11);
    NumTitles.Direction = ParameterDirection.Output;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    OleDbDataReader myReader = testCMD.ExecuteReader();
    Console.WriteLine ("Book Titles for this Author:");
    while (myReader.Read()) 
       {
         Console.WriteLine ("{0}", myReader.GetString (2));
       };
    myReader.Close() ;
    Console.WriteLine("Number of Rows: " + NumTitles.Value );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
  5. Memodifikasi koneksi string untuk objek sambungan untuk menunjuk ke komputer yang menjalankan SQL Server.
  6. Jalankan kode. Perhatikan bahwa hexadecimal mengambil catatan dan kemudian kembali nilai parameter. Anda dapat menggunakan metode bacahexadecimal objek untuk bergerak melalui catatan kembali.

    Jendela Output menampilkan judul dua buku, nilai kembali 5, dan parameter output, yang berisi jumlah catatan (2). Perhatikan bahwa Anda harus menutup hexadecimal dalam kode untuk melihat nilai parameter. Selain itu, perhatikan bahwa Anda tidak harus bergerak melalui semua catatan untuk melihat parameter kembali 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 dari prosedur tersimpan. Ini paling berguna untuk fungsi-fungsi agregat seperti dalam contoh berikut.
  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. Buat baru Visual C#.NET aplikasi Windows proyek.
  3. Menggunakan menggunakan pernyataan pada sistem dan System.Data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Menambahkan kode ini ke atas kode Formulir modul. Pastikan bahwa Anda Salin hanya kode untuk selular yang telah Anda pilih.SQL klien
    using System.Data.SqlClient;
    					
    OLE DB Data Provider
    using System.Data.OleDb;
    					
  4. Tambahkan kode berikut ke acara Form_Load :SQL klien
    string strCount;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated " + 
       "Security=sspi;initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
            
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount =testCMD.ExecuteScalar ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    OLE DB Data Provider
    string strCount;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure2", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    
    PubsConn.Open();
    
    strCount = testCMD.ExecuteScalar().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strCount);
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
  5. Memodifikasi koneksi string untuk objek sambungan untuk menunjuk ke komputer yang menjalankan SQL Server.
  6. Jalankan kode. Perhatikan bahwa metode ExecuteScalar objek perintah kembali parameter. ExecuteScalar juga gulung balik nilai kolom 1, baris 1 rowset kembali. Oleh karena itu, nilai intCount adalah hasil dari fungsi Bangsawan dari prosedur tersimpan.

Menggunakan metode ExecuteNonQuery objek perintah

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

Metode ExecuteNonQuery paling berguna ketika Anda menggunakan pernyataan INSERT, UPDATE, atau menghapus jika Anda hanya perlu tahu berapa banyak baris berubah. Prosedur yang disimpan di mana Anda menggunakan hanya pilih pernyataan, Anda menerima-1 karena baris tidak dipengaruhi oleh permintaan.
  1. Membuat disimpan prosedur berikut pada komputer 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. Buat baru Visual C#.NET aplikasi Windows proyek.
  3. Menggunakan menggunakan pernyataan pada sistem dan System.Data namespaces sehingga Anda tidak harus memenuhi syarat Deklarasi namespaces tersebut kemudian dalam kode Anda. Menambahkan kode ini ke atas kode Formulir modul. Pastikan bahwa Anda Salin hanya kode untuk selular yang telah Anda pilih.SQL klien
    using System.Data.SqlClient;
    					
    OLE DB Data Provider
    using System.Data.OleDb;
    					
  4. Ganti kode di bawah ini acara Form1_Load swasta dalam modul kode Form1 dengan kode berikut:SQL klien
    string strRowAffect;
    SqlConnection PubsConn = new SqlConnection 
       ("Data Source=server;integrated Security=sspi;" + 
       "initial catalog=pubs;");
    SqlCommand testCMD = new SqlCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    SqlParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", SqlDbType.Int);
    RetVal.Direction = ParameterDirection.ReturnValue;
    SqlParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", SqlDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    SqlParameter FnameIn = testCMD.Parameters.Add 
       ("@au_fnam", SqlDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    
    strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;
    
    Console.WriteLine("Number of Rows: " + strRowAffect );
    Console.WriteLine("Return Value: " + RetVal.Value);
    					
    OLE DB Data Provider
    int intRowAffected;
    OleDbConnection PubsConn = new OleDbConnection 
       ("Provider=SQLOLEDB;Data Source=server;" + 
       "integrated Security=sspi;initial catalog=pubs;");
    OleDbCommand testCMD = new OleDbCommand 
       ("TestProcedure3", PubsConn);
    
    testCMD.CommandType = CommandType.StoredProcedure;
    
    OleDbParameter RetVal = testCMD.Parameters.Add 
       ("RetVal", OleDbType.Integer);
    RetVal.Direction = ParameterDirection.ReturnValue;
    OleDbParameter IdIn = testCMD.Parameters.Add 
       ("@au_idIN", OleDbType.VarChar, 11);
    IdIn.Direction = ParameterDirection.Input;
    OleDbParameter FnameIn = testCMD.Parameters.Add
       ("@au_fname", OleDbType.VarChar, 30);
    FnameIn.Direction = ParameterDirection.Input;
    
    IdIn.Value = "213-46-8915";
    FnameIn.Value = "Marjorie";
    
    PubsConn.Open();
    intRowAffected = testCMD.ExecuteNonQuery();
    
    Console.WriteLine("Number of Rows affected: " + intRowAffected);
    Console.WriteLine(RetVal.Value);
    					
  5. Memodifikasi koneksi string untuk objek sambungan untuk menunjuk ke komputer yang menjalankan SQL Server.
  6. Jalankan kode. Jendela Output menampilkan jumlah baris yang terpengaruh (intRowAffect) dan nilai parameter kembali.

REFERENSI

Untuk informasi tambahan, kunjungi situs-situs Website MSDN berikut:
Pengenalan.NET Framework kelas perpustakaan

Mengambil Data hexadecimal

Properti

ID Artikel: 310070 - Kajian Terakhir: 12 Juni 2012 - Revisi: 3.0
Berlaku bagi:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Kata kunci: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtid
Penerjemahan 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: 310070

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