Làm th? nào đ?: G?i m?t th? t?c d?ch s?n Parameterized b?ng cách s? d?ng ADO.NET và Visual C#.NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 310070 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Có m?t s? cách đ? s? d?ng ADO.NET đ? g?i m?t th? t?c d?ch s?n và l?y l?i giá tr? tr? l?i và tr? v? các thông s?, bao g?m:
  • S? d?ng m?t đ?i tư?ng t?p d? li?u thu th?p các hàng quay tr? l?i và làm vi?c v?i các d?ng thêm vào các giá tr? tr? l?i và các thông s? tr? l?i.
  • S? d?ng m?t đ?i tư?ng DataReader đ? thu th?p các hàng quay tr? l?i, đ? di chuy?n qua các hàng, và sau đó đ? thu th?p giá tr? tr? l?i và tr? l?i tham s?.
  • S? d?ng các phương pháp ExecuteScalar tr? v? giá tr? t? c?t c?a các Kết quả hàng đầu v?i giá tr? tr? l?i và các thông s? tr? l?i. Đi?u này là h?u ích nh?t v?i ch?c năng t?ng h?p.
  • S? d?ng các phương pháp ExecuteNonQuery đ? tr? v? ch? là các thông s? tr? l?i và các giá tr? tr? l?i. B?t k? tr? l?i hàng b? lo?i b?. Đi?u này là h?u ích nh?t đ? th?c hi?n truy v?n th?c hi?n.
Bài vi?t này minh ch?ng cu?i ba phương pháp và s? d?ng c? hai SqlCommand và các đ?i tư?ng OleDbCommand . H?y ch?c ch?n r?ng b?n đ? sao chép ch? m? cho các nhà cung c?p qu?n l? mà b?n đang s? d?ng. N?u b?n không ch?c ch?n mà nhà cung c?p qu?n l?, b?n nên s? d?ng, truy c?p vào Microsoft Developer Network Web site sau:
.NET d? li?u các nhà cung c?p
Trong m?i m?u trong bài vi?t này, các thông s? đư?c b? sung vào b? sưu t?p các tham s? c?a l?nh đ?i tư?ng. Khi b?n s? d?ng các đ?i tư?ng SqlCommand , b?n không có thêm các tham s? trong b?t k? th? t?, nhưng các thông s? ph?i có đúng tên. Khi b?n s? d?ng các đ?i tư?ng OleDbCommand , b?n ph?i thêm các tham s? theo th? t? đúng, và b?n không th? s? d?ng các tham s? theo tên.

S? d?ng DataReader đ? tr? l?i hàng và các thông s?

B?n có th? s? d?ng các đ?i tư?ng DataReader đ? tr? v? m?t d?ng ch?-đ?c, ch? có chuy?n ti?p c?a d? li?u. Thông tin DataReader ch?a có th? đ?n t? m?t th? t?c d?ch s?n. Ví d? này s? d?ng các đ?i tư?ng DataReader đ? ch?y m?t th? t?c d?ch s?n mà có m?t đ?u vào và đ?u ra m?t tham s? và sau đó di chuy?n qua các h? sơ quay tr? l?i đ? xem các thông s? tr? l?i.
  1. T?o th? t?c sau đây đư?c lưu tr? trên máy ch? đang ch?y 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. T?o ra m?t m?i Visual C#.D? án ?ng d?ng Windows NET.
  3. S? d?ng các báo cáo b?ng cách s? d?ng trên các h? th?ng và các không gian tên System.Data do đó b?n không c?n ph?i vư?t qua v?ng lo?i t? khai trong nh?ng không gian tên sau trong m? c?a b?n. Thêm m? này t? đ?u c?a mô-đun m?u m?. H?y ch?c ch?n đ? sao chép ch? m? cho các nhà cung c?p mà b?n đ? ch?n.SQL Client
    using System.Data.SqlClient;
    					
    OLE DB d? li?u nhà cung c?p
    using System.Data.OleDb;
    					
  4. Thay th? m? trong s? ki?n này Form_Load tư nhân v?i đo?n m? sau:SQL Client
    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 d? li?u nhà cung c?p
    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. S?a đ?i các chu?i k?t n?i cho các đ?i tư?ng k?t n?i đ? tr? đ?n máy tính đang ch?y SQL Server.
  6. Ch?y m?. Thông báo DataReader l?y các h? sơ và sau đó tr? v? các giá tr? tham s?. B?n có th? s? d?ng phương pháp đ?cDataReader đ?i tư?ng đ? di chuy?n qua các h? sơ tr? l?i.

    Đ?u ra c?a s? hi?n th? tiêu đ? c?a hai cu?n sách, giá tr? tr? l?i 5, và thông s? s?n lư?ng, có s? lư?ng h? sơ (2). Chú ? r?ng b?n ph?i đóng DataReader trong m? đ? xem các giá tr? tham s?. Ngoài ra, lưu ? r?ng b?n không c?n ph?i di chuy?n qua t?t c? các b?n ghi đ? xem các thông s? tr? l?i n?u DataReader đóng c?a.

S? d?ng phương pháp ExecuteScalar c?a đ?i tư?ng l?nh

B?n có th? s? d?ng các phương pháp ExecuteScalar c?a đ?i tư?ng l?nh đ? l?y giá tr? tham s?. Ngoài ra, ExecuteScalar tr? v? c?t c?a hàng đ?u c?a các th? t?c d?ch s?n. Đi?u này là h?u ích nh?t cho các ch?c năng t?ng h?p như trong ví d? sau.
  1. T?o th? t?c sau đây đư?c lưu tr? trên máy ch? đang ch?y 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. T?o ra m?t m?i Visual C#.D? án ?ng d?ng Windows NET.
  3. S? d?ng các báo cáo b?ng cách s? d?ng trên các h? th?ng và các không gian tên System.Data do đó b?n không c?n ph?i vư?t qua v?ng lo?i t? khai trong nh?ng không gian tên sau trong m? c?a b?n. Thêm m? này t? đ?u c?a mô-đun m?u m?. H?y ch?c ch?n r?ng b?n đ? sao chép ch? m? cho các nhà cung c?p mà b?n đ? ch?n.SQL Client
    using System.Data.SqlClient;
    					
    OLE DB d? li?u nhà cung c?p
    using System.Data.OleDb;
    					
  4. Thêm m? sau s? ki?n này Form_Load :SQL Client
    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 d? li?u nhà cung c?p
    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. S?a đ?i các chu?i k?t n?i cho các đ?i tư?ng k?t n?i đ? tr? đ?n máy tính đang ch?y SQL Server.
  6. Ch?y m?. Chú ? r?ng các phương pháp ExecuteScalar c?a đ?i tư?ng l?nh tr? v? các thông s?. ExecuteScalar c?ng tr? v? giá tr? c?a c?t 1, hàng 1 c?a tr? l?i rowset. Do đó, giá tr? c?a intCount là k?t qu? c?a các ch?c năng tính t? các th? t?c d?ch s?n.

S? d?ng phương pháp ExecuteNonQuery c?a đ?i tư?ng l?nh

M?u này s? d?ng các phương pháp ExecuteNonQuery đ? ch?y truy v?n và tr? v? các giá tr? tham s?. ExecuteNonQuery c?ng tr? v? s? lư?ng h? sơ đang b? ?nh hư?ng sau khi truy v?n ch?y. Tuy nhiên, ExecuteNonQuery không tr? v? b?t k? hàng ho?c c?t t? th? t?c d?ch s?n.

Các phương pháp ExecuteNonQuery là h?u ích nh?t khi b?n s? d?ng phát bi?u INSERT, UPDATE, ho?c xoá b? n?u b?n ch? c?n ph?i bi?t làm th? nào nhi?u hàng đư?c thay đ?i. Trong m?t th? t?c d?ch s?n mà b?n đang s? d?ng ch? là m?t tuyên b? ch?n, b?n nh?n đư?c -1 b?i v? không có hàng b? ?nh hư?ng b?i truy v?n.
  1. T?o th? t?c sau đây đư?c lưu tr? trên máy tính đang ch?y 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. T?o ra m?t m?i Visual C#.D? án ?ng d?ng Windows NET.
  3. S? d?ng các báo cáo b?ng cách s? d?ng trên các h? th?ng và các không gian tên System.Data do đó b?n không c?n ph?i vư?t qua v?ng lo?i t? khai trong nh?ng không gian tên sau trong m? c?a b?n. Thêm m? này t? đ?u c?a mô-đun m?u m?. H?y ch?c ch?n r?ng b?n đ? sao chép ch? m? cho các nhà cung c?p mà b?n đ? ch?n.SQL Client
    using System.Data.SqlClient;
    					
    OLE DB d? li?u nhà cung c?p
    using System.Data.OleDb;
    					
  4. Thay th? m? dư?i đây các s? ki?n Form1_Load tư nhân trong mô-đun m? Form1 v?i đo?n m? sau:SQL Client
    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 d? li?u nhà cung c?p
    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. S?a đ?i các chu?i k?t n?i cho các đ?i tư?ng k?t n?i đ? tr? đ?n máy tính đang ch?y SQL Server.
  6. Ch?y m?. Đ?u ra c?a s? hi?n th? s? hàng b? ?nh hư?ng (intRowAffect) và giá tr? c?a tham s? tr? l?i.

THAM KH?O

Đ? bi?t thêm chi ti?t, h?y truy c?p web site MSDN Web sau đây:
Gi?i thi?u v? các.Thư vi?n l?p NET Framework

L?y d? li?u b?ng cách s? d?ng DataReader

Thu?c tính

ID c?a bài: 310070 - L?n xem xét sau cùng: 12 Tháng Sáu 2012 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
T? khóa: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata kbmt KB310070 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: 310070

Cung cấp Phản hồi

 

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