Chủ Nhật, 6 tháng 12, 2009

Stored Procedures

Khi dùng Query Analyzer chúng ta có thể đặt tên và save các nhóm câu lệnh SQL vào một file dưới dạng script để có thể sử dụng trở lại sau này. Tuy nhiên thay vì save vào text file ta có thể save vào trong SQL Server dưới dạng Stored Procedure. Stored Procedure là một nhóm câu lệnh Transact-SQL đã được compiled (biên dịch) và chứa trong SQL Server dưới một tên nào đó.

Ưu Ðiểm Của Stored Procedure
Stored Procedure có một số ưu điểm chính như sau:
·                                 Performance : Khi thực thi một câu lệnh SQL thì SQL Server phải kiểm tra permission xem user gởi câu lệnh đó có được phép thực hiện câu lệnh hay không đồng thời kiểm tra cú pháp rồi mới tạo ra một execute plan và thực thi. Nếu có nhiều câu lệnh như vậy gởi qua network có thể làm giảm đi tốc độ làm việc của server. SQL Server sẽ làm việc hiệu quả hơn nếu dùng stored procedure vì người gởi chỉ gởi một câu lệnh đơn và SQL Server chỉ kiểm tra một lần sau đó tạo ra một execute plan và thực thi. Nếu stored procedure được gọi nhiều lần thì execute plan có thể được sử dụng lại nên sẽ làm việc nhanh hơn. Ngoài ra cú pháp của các câu lệnh SQL đã được SQL Sever kiểm tra trước khi save nên nó không cần kiểm lại khi thực thi.
·                                 Programming Framework : Một khi stored procedure được tạo ra nó có thể được sử dụng lại. Cũng giống như các ngôn ngữ lập trình khác stored procedure cho phép ta đưa vào các input parameters (tham số) và trả về các output parameters đồng thời nó cũng có khả năng gọi các stored procedure khác.
·                                 Security : Truy xuất dữ liệu trực tiếp của một user nào đó vào một số tables, ta có thể viết một stored procedure để truy xuất dữ liệu và chỉ cho phép user đó được sử dụng stored procedure đã viết sẵn. Stored procedure có thể được encrypt (mã hóa) để tăng cường tính bảo mật.
Các Loại Stored Procedure
Stored procedure có thể được chia thành 5 nhóm như sau:
1.                              System Stored Prcedure : Là những stored procedure chứa trong Master database và thường bắt đầu bằng tiếp đầu ngữ sp_ . Các stored procedure này thuộc loại built-in và chủ yếu dùng trong việc quản lý database (administration) và security. Ví dụ bạn có thể kiểm tra tất cả các processes đang được sử dụng bởi user DomainName\Administrators bạn có thể dùng sp_who @loginame='DomainName\Administrators' . Có hàng trăm system stored procedure trong SQL Server. Bạn có thể xem chi tiết trong SQL Server Books Online.
2.                              Local Stored Procedure : Ðây là loại thường dùng nhất. Chúng được chứa trong user database và thường được viết để thực hiện một công việc nào đó. Thông thường người ta nói đến stored procedure là nói đến loại này. Local stored procedure thường được viết bởi DBA hoặc programmer. Chúng ta sẽ bàn về cách tạo stored prcedure loại này trong phần kế tiếp.
3.                              Temporary Stored Procedure : Là những stored procedure tương tự như local stored procedure nhưng chỉ tồn tại cho đến khi connection đã tạo ra chúng bị đóng lại hoặc SQL Server shutdown. Các stored procedure này được tạo ra trên TempDB của SQL Server nên chúng sẽ bị delete khi connection tạo ra chúng bị cắt đứt hay khi SQL Server down. Temporary stored procedure được chia làm 3 loại : local (bắt đầu bằng #), global (bắt đầu bằng ##) và stored procedure được tạo ra trực tiếp trên TempDB. Loại local chỉ được sử dụng bởi connection đã tạo ra chúng và bị xóa khi disconnect, còn loại global có thể được sử dụng bởi bất kỳ connection nào. Permission cho loại global là dành cho mọi người (public) và không thể thay đổi. Loại stored procedure được tạo trực tiếp trên TempDB khác với 2 loại trên ở chỗ ta  thể set permission, chúng tồntại kể cả sau khi connection tạo ra chúng bị cắt đứt và chỉ biến mất khi SQL Server shut down.
4.                              Extended Stored Procedure : Ðây là một loại stored procedure sử dụng một chương trình ngoại vi (external program) vốn được compiled thành một DLL để mở rộng chức năng hoạt động của SQL Server. Loại này thường bắt đầu bằng tiếp đầu ngữ xp_ .Ví dụ, xp_sendmail dùng đề gởi mail cho một người nào đó hay xp_cmdshell dùng để chạy một DOS command... Ví dụ  xp_cmdshell 'dir c:\' . Nhiều loại extend stored procedure được xem như system stored procedure và ngược lại.
5.                              Remote Stored Procedure : Những stored procedure gọi stored procedure ở server khác.
Viết Stored Procedure
Ta cũng có thể dùng các lệnh CREATE, ALTER, DROP để tạo mới, thay đổi hay xóa bỏ một stored procedure.
Ví dụ: Tạo một stored procedure dùng Enterprise Manager click lên trên Stored Procedure -> New Stored Procedure....
Ta sẽ tạo ra một stored procedure để insert một new order vào Orders table trong Practice DB. Ðể insert một order vào database ta cần đưa vào một số input như OrderID, ProductName và CustomerName. Sau đó ta trả về kết quả cho biết việc insert đó có thành công hay không. Result = 0 là insert thành công.
             CREATE PROCEDURE AddNew
             @OrderID smallint,
             @ProductName varchar(50),
             @CustomerName varchar(50),
             @Result smallint=1 Output
             AS

             DECLARE @CustomerID smallint
             BEGIN TRANSACTION
             If not Exists(SELECT CustomerID FROM Customers WHERE [Name]=@CustomerName)
             --This is a new customer. Insert this customer to the database
                             BEGIN
                                            SET @CustomerID= (SELECT Max(CustomerID) FROM Customers)
                                            SET @CustomerID=@CustomerID+1
                                            INSERT INTO Customers VALUES(@CustomerID,@CustomerName)
                                            If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID)
                                            --This order exists and could not be added any more so Roll back
                                                           BEGIN
                                                                          SELECT @Result=1
                                                                          ROLLBACK TRANSACTION
                                                           END
                                            Else
                                            --This is a new order insert it now
                                                           BEGIN
                                                                          INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID)
                                                                          SELECT @Result=0
                                                                          COMMIT TRANSACTION
                                                           END
                             END
             Else
             --The customer exists in DB go ahead and insert the order
                             BEGIN
                                            If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID)
                                            --This order exists and could not be added any more so Roll back
                                                           BEGIN
                                                                          SELECT @Result=1
                                                                          ROLLBACK TRANSACTION
                                                           END
                                            Else
                                            --This is a new order insert it now
                                                           BEGIN
                                                                          INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID)
                                                                          SELECT @Result=0
                                                                          COMMIT TRANSACTION
                                                           END
                             END
             Print @Result
             Return
Dùng lệnh CREATE PROCEDURE tạo một stored procedure (nếu là temporary stored procedure thì thêm dấu # trước tên của procedure. Nếu muốn encrypt thì dùng WITH ENCRYPTION trước chữ AS) và các input hoặc ouput parameters. Nếu là output thì thêm keyword OUTPUT đằng sau parameter. Ta có thể cho giá trị default cùng lúc với khai báo data type của parameter. Kể từ sau chữ AS là phần body của stored procedure.
Trong ví dụ ở trên trước hết ta khai báo một biến @CustomerID sau đó bắt đầu một transaction bằng BEGIN TRANSACTION (toàn bộ công việc insert này được thực hiện trong một Transaction nghĩa là hoặc là insert thành công hoặc là không làm gì cả- all or nothing). Trước hết ta kiểm tra xem người khách hàng là người mới hay cũ. Nếu là người mới thì ta "tiện tay" insert vào Customers table luôn còn nếu không thì chỉ insert vào Orders table mà thôi. Nếu là người customer mới ta lấy CustomerID lớn nhất từ Customers table bỏ vào biến @CustomerID và sau đó tăng lên một đơn vị dùng cho việc Insert Customer ở dòng kế tiếp.
Sau khi insert người customer mới ta tiếp tục công việc bằng việc kiểm tra xem Order muốn insert có tồn tại chưa (vì nếu order đã tồn tại thì khi insert SQL Server sẽ báo lỗi do OrderID là Primary key). Nếu như order trên vì lý do nào đó đã có trong DB thì ta roll back và trả kết quả =1 còn nếu không thì ta insert một order mới vào và commit transaction với kết quả trả về =0.
Các ví Dụ tham khảo nữa nhe:
CREATE procedure XOA_KHACHHANG
          (
          @MSKH char(10)
          ) as
Begin
          if (exists(select *from KHACHHANG where MSKH=@MSKH))
          begin
          if(not exists(select *from HOADON where MSKH=@MSKH))
            begin
            delete KHACHHANG where MSKH=@MSKH
              if @@rowcount=0
                                  raiserror ('Xoa khach hang khong thanh cong',1,1)
              else
                                  raiserror ('Xoa khach hang thanh cong',1,1)        
             end
                      else
              raiserror ('Khong the xoa khach hang nay ',1,1)
            end
            else
            raiserror ('Khavh hang nay khong ton tan',1,1)

            end

CREATE procedure SUA_KHACHHANG
          (
          @MSKH char(10),
          @TENKH  varchar(50),
          @DIACHI  varchar(100),
          @PHAI     char(5),
          @DIENTHOAI varchar(15)
          ) as
Begin
          if (exists(select *from KHACHHANG where MSKH=@MSKH))
begin
if isnumeric(@DIENTHOAI)=1 or @DIENTHOAI=''      
begin
          if @DIENTHOAI='' or DATALENGTH(@DIENTHOAI)=6 or DATALENGTH(@DIENTHOAI)=7 or DATALENGTH(@DIENTHOAI)=8 or DATALENGTH(@DIENTHOAI)=9 or DATALENGTH(@DIENTHOAI)=10 or DATALENGTH(@DIENTHOAI)=11
          begin
           if @DIENTHOAI=''
           set @DIENTHOAI=null
           update KHACHHANG
           set TENKH=@TENKH,DIACHI=@DIACHI,PHAI=@PHAI,DIENTHOAI=@DIENTHOAI where MSKH=@MSKH
            if @@rowcount=0
                      raiserror ('Sua khach hang khong thanh cong',2,2)
            else
                      raiserror ('Sua khach hang thanh cong',2,2)
          end
          else
            raiserror ('So dien thoai ko hop le',3,1)
end
else
raiserror ('So dien thoai ko hop le',3,1)
end
else
raiserror ('khach hang nay khong ton tai',4,2)
end 

Thứ Sáu, 4 tháng 12, 2009

OpenDNS - Tăng tốc duyệt web và hơn thế nữa

OpenDNS là dịch vụ DNS (Domain Name System) cung cấp cho người dùng internet địa chỉ DNS giúp bạn truy cập web nhanh chóng, dễ dàng và an toàn hơn bao giờ hết.

Những tính năng ưu việt của OpenDNS so với DNS thông thường:

1. An toàn hơn: OpenDNS có khả năng nhận diện các trang phishing có ý đồ xấu muốn lấy cắp thông tin cá nhân hay lừa đảo để lấy tiền của bạn. Chức năng này hoạt động không tùy thuộc vào hệ điều hành hay trình duyệt mà bạn đang sử dụng. Khi vào 1 trang phishing bạn sẽ nhận được cảnh báo như hình trên.


2. Nhanh hơn: Máy tính của bạn cần dùng đến DNS khi bạn truy cập vào một website nào đó hay gửi đi một email chẳng hạn. Có 2 yếu tố chính làm cho DNS trở nên nhanh hơn, đó là bộ nhớ cache lớn và hệ thống mạng tốt. OpenDNS có hệ thống cache rất lớn đặt tại các giao điểm của mạng internet. Điều này thực sự làm tăng tốc độ duyệt web của bạn lên rất nhiều.

3. Thông minh hơn: Thông thường, khi bạn gõ sai địa chỉ web thì trình duyệt sẽ không thể truy cập trang web đó được. Nhưng với OpenDNS thì khác. Khi bạn gõ sai tên miền, ví dụ như yahoo.cmo hay google.mco thì OpenDNS sẽ tự động chỉnh lại cho đúng thành yahoo.com và google.com. Nếu một khi OpenDNS không sửa lỗi được khi bạn gõ sai thì nó sẽ hiển thị lên các kết quả tìm kiếm các trang có tên miền gần giống như vậy để bạn có thể dễ dàng lựa chọn.

4. Những lợi ích khác khi sử dụng OpenDNS:
- Hoàn toàn miễn phí.
- Dễ sử dụng. Bạn chỉ cần thiết lập cấu hình DNS 1 lần duy nhất để nó hoạt động mãi. Nếu không thích dùng OpenDNS nữa bạn cũng có thể dễ dàng trở về thiết lập như ban đầu.
- Không cần cài đặt bất cứ phần mềm nào.
- Có thể chạy trên mọi hệ điều hành, mọi trình duyệt web.



Nếu bạn đang sử dụng Hệ Điều Hành Window XP thì bạn có thể cấu hình theo hướng dẫn sau:

Bước 1: Vào Control Panel từ Start menu.




Bước 2: Chọn Network Connections từ Control Panel




Bước 3: Mở biểu tượng kết nối từ cửa sổ Network Connections




Bước 4: Click Properties button.




Bước 5: Chọn Internet Protocol (TCP/IP) và click Properties




Bước 6: Chọn Use the following DNS server addresses và đánh OpenDNS addresses vào ô Preferred DNS server( 208.67.222.222 ) và ( 208.67.220.220 ) Alternate DNS server.





Thứ Ba, 17 tháng 11, 2009

Tình yêu kỹ thuật số (st)

Giới blogger đồn nhau rằng có một chàng hoàng tử rất đẹp trai nhưng lại bị mụ phù thủy gian ác phù phép.

Mỗi năm chàng chỉ được nói một từ duy nhất. Thương thay, chàng lại yêu nàng công chúa "hàng xóm" xinh đẹp. Để tỏ tình, chàng quyết định không nói gì trong 3 năm để có thể bày tỏ 3 từ "Anh yêu em".

Ba năm trôi qua... Chàng ngẫm thấy nếu nói mỗi thế thì chẳng có tác dụng gì. Chàng tiếp tục đợi thêm 5 năm nữa để nói "Em làm vợ anh nhé".


Sau 5 năm đằng đẵng, chàng tới gặp công chúa. Nàng vẫn xinh đẹp như xưa và đang lẩm nhẩm hát rất yêu đời. Hoàng tử quỳ xuống, nhìn vào mắt công chúa và nói: "Anh yêu em, em làm vợ anh nhé?".

Những tưởng lời nguyền được hóa giải, nhưng không... Công chúa vô cùng ngạc nhiên, tháo tai nghe của chiếc MP3 đời mới và hỏi lại:

- Anh vừa nói cái gì cơ?

Chớ trêu thay... Nhưng thật may, hoàng tử cũng rút chiếc điện thoại di động sành điệu ra và trao cho công chúa. Chàng đã ghi âm 8 từ quý giá của mình. Và thế là, hoàng tử và công chúa lấy nhau đúng như trong cổ tích nhờ có công nghệ kỹ thuật số.

Chủ Nhật, 15 tháng 11, 2009

Thứ sáu ngày 13 dưới góc nhìn toán học và văn hóa

TTO - Ở một số nước phương Tây, người ta cho rằng thứ sáu ngày 13 là ngày rủi ro. Tuy nhiên, báo Le Figaro (Pháp) số ra ngày 11-3-2009 cho biết số người mua lô tô tại Pháp vào thứ sáu ngày 13 cao gấp 3 lần so với những ngày khác.
Vậy thứ sáu ngày 13 có đặc điểm gì về mặt toán học và văn hóa? Nó là ngày tốt hay xấu?


Kiệt tác Bữa tiệc cuối cùng của Léonardo da Vinci
Bằng lý thuyết đồng dư, toán học chứng minh được một năm bất kỳ có ít nhất một thứ sáu ngày 13 và nhiều nhất ba thứ sáu ngày 13. Hơn nữa, một năm có ba thứ sáu ngày 13 khi và chỉ khi ngày đầu năm là thứ năm (đối với năm không nhuận) hoặc chủ nhật (đối với năm nhuận). Đó là trường hợp của năm 2009: có ba thứ sáu ngày 13 rơi vào tháng hai, tháng ba và tháng mười một. Sự kiện này đã xảy ra vào năm 1998 và sẽ lặp lại vào các năm 2015, 2026.
Những năm sắp đến, 2010 và 2011 chỉ có một thứ sáu ngày 13 mỗi năm. Năm 2012 có ba thứ sáu ngày 13 rơi vào tháng giêng, tháng tư và tháng bảy. Bộ ba “giêng, tư, bảy” này ít gặp hơn so với bộ ba “hai, ba, mười một”. Năm 2013 có hai thứ sáu ngày 13 rơi vào tháng 9 và tháng 12. Tổng cộng có 21 thứ sáu ngày 13 từ 2009 - 2019.
Cũng bằng toán học, ta tính được khoảng cách giữa hai ngày thứ sáu 13 gần nhất chỉ có thể là 27, 90, 181, 244, 272, 335 hoặc 426 ngày. Như vậy, hai thứ sáu ngày 13 gần nhất có thể cách nhau hơn một năm. Đó chính là trường hợp 13-8-1999 và 13-10-2000.
Theo Kinh Thánh, Chúa Jésus bị đóng đinh trên thập tự giá vào thứ sáu. Hơn nữa, bữa ăn cuối cùng của Chúa với các môn đồ có đúng 13 người. Việc này thường được xem là nguồn gốc việc kiêng sợ thứ sáu ngày 13.
Ở Ý, số 17 được gắn với sự rủi ro chứ không phải số 13. Còn ở Trung Quốc, con số này là 4 vì được phát âm gần giống với “tử” nghĩa là chết. Ở châu Mỹ Latin, ngày kiêng cữ lại là thứ ba 13.
Về mặt thống kê, hiện chưa có dữ liệu đáng tin cậy nào để gán cho thứ sáu ngày 13 với “may mắn” hay “rủi ro” theo một nghĩa nào đó. Chẳng hạn, xác suất trúng lô tô ở Pháp vào thứ sáu ngày 13 cũng giống với những ngày khác và xấp xỉ với 1/14.000.000. Xác suất nhỏ bé này không có nghĩa là bạn không thể trúng lô tô và không hề ngăn cản người chơi lô tô nuôi hi vọng!
CÔNG KHANH

Thứ Tư, 4 tháng 11, 2009

Sách C# Tiếng Việt

Mời các Bạn download các ebook C# tiếng Việt sau về từ từ nghiên cứu:
1.Các giải pháp lập trình C#
2.Kỹ thuật lập trình C#
3.Ngôn ngữ lập trình C#
4.Lập trình Window với C#
5.Giáo trình C# của ĐH KHTN
6.So sánh C# và VB.Net
7.C# Fast Food

Link Download:

http://www.mediafire.com/?share...d44918aa86de61a2a3bb8123



Hoặc: 

http://www.mediafire.com/download.php?j3zlqajzzjt

http://www.mediafire.com/download.php?mnn0y3ngz0m

http://www.mediafire.com/download.php?2mydwb1wduh

http://www.mediafire.com/download.php?myzqmdmk4yt

http://www.mediafire.com/download.php?gmmytajodmy

http://www.mediafire.com/download.php?mjtm5y0mxza

http://www.mediafire.com/download.php?yyzjymuzr5m

Một số phương pháp Debug

Trong Visual C++ 6

Một desktop application thông thường

Breakpoint thông thường
Chuyển con trỏ tới dòng cần ngừng chương trình, và ấn F9

Advandce break point
Vào menu Edit => chọn mục Breakpoints
Hoặc ấn Alt-F9

Chi tiết trong advandce break point:
- Tab location: set break point tại một dòng code, click condition nếu muốn đặt điểu kiện cho break đó, ví dụ: i==10 (breakpoint trong vòng lặp, ngừng khi giá trị biến đếm i bằng 10)
- Tab data: đặt break point khi dữ liệu thay đổi tại vị trí cụ thể trong bộ nhớ, ví dụ: *(long*)0x123 (break point khi 4 byte tại vị trí 0x123 bị thay đổi giá trị.
- Tab messages: đặt break point khi có window message tới cửa sổ của ta(chọn winproc, và message).

Debug file .dll và file .cgi

Bạn đã bao giờ lập trình web cgi bằng C++, nếu có thì hẳn bạn sẽ biết là debug nó khó khăn như thế nào, đây là thủ thuật, hầu như là giống hệt như debug một file dll, tuy nhiên có 1 chút xíu khác (đôi khi).

Cách 1:
Giả sử cgi hoặc dll bạn cần đặt tại vị trí: C:\\location1\\a.dll
- Vào menu Project => setting => chọn tab debug => chỉnh mục executable to debug session: C:\\location1\\a.dll => chọn tab link => chọn category: general => chỉnh mục output file name: C:\\location1\\a.dll
- Đặt 1 break point bất kì (bằng cách ấn F9).
- Bạn nhớ là đang build mode debug không phải release.
- Bây giờ thì kích hoạt cho dll hoặc cgi đó lên ( chạy file exe - file exe có sử dụng dll đó, hoặc là gõ localhost vao trình duyệt Web IE,.. chỉ có bạn là biết chính xác cách kích hoạt nó như thế nào, túm lại là kích hoạt nó lên)
- 1 breakpoint se bật ra trong VC, lúc đó bạn đã điều khiển được luồng chạy của chương trình.

Cách 2:
- Chèn trong code tại chỗ nào bạn muốn ngừng 1 dòng lệnh sau
Mã: Chọn tất cả
__asm int 3; Hoặc MessageBox(...);

- Load dll, bằng cách kích hoạt chương trình chính như nêu ở cách 1
- Chờ đến khi nó bật ra 1 cái MessageBox, chưa vội ấn OK, đặt một cái breakpoint vào vị trị dưới dòng lệnh MessageBox hoặc __asm int 3, bây giờ mới click OK cái MessageBox đó.
- Bây giờ bạn đã điều khiển được luồng chạy của chương trình.

Thứ Hai, 2 tháng 11, 2009

Kết nối cơ sở dữ liệu_trong C#

Bạn cần mở một kết nối đến một cơ sở dữ liệu.

@       Tạo một đối tượng kết nối phù hợp với kiểu cơ sở dữ liệu mà bạn cần kết nối; tất cả các đối tượng kết nối đều hiện thực giao diện System.Data.IDbConnection. Cấu hình đối tượng kết nối bằng cách thiết lập thuộc tính ConnectionString của nó. Mở kết nối bằng cách gọi phương thức Open của đối tượng kết nối.
Bước đầu tiên trong việc truy xuất cơ sở dữ liệu là mở một một kết nối đến cơ sở dữ liệu. Giao diện IDbConnection mô tả một kết nối cơ sở dữ liệu, và mỗi data-provider chứa một hiện thực duy nhất. Dưới đây là danh sách các hiện thực IDbConnection cho năm data-provider chuẩn:
·         System.Data.Odbc.OdbcConnection 
·         System.Data.OleDb.OleDbConnection 
·         System.Data.OracleClient.OracleConnection 
·         System.Data.SqlServerCe.SqlCeConnection
·         System.Data.SqlClient.SqlConnection 

Bạn cấu hình một đối tượng kết nối bằng một chuỗi kết nối. Chuỗi kết nối là một tập các cặp giá trị tên được phân cách bằng dấu chấm phẩy. Bạn có thể cung cấp một chuỗi kết nối làm đối số trong phương thức khởi dựng hoặc bằng cách thiết lập thuộc tính ConnectionString của đối tượng kết nối trước khi mở kết nối. Mỗi hiện thực lớp kết nối yêu cầu bạn cung cấp những thông tin khác nhau trong chuỗi kết nối. Bạn hãy tham khảo tài liệu về thuộc tính ConnectionString đối với mỗi hiện thực để biết được những giá trị mà bạn có thể chỉ định. Dưới đây là một số thiết lập:
·         Tên server cơ sở dữ liệu đích
·         Tên cơ sở dữ liệu cần mở vào lúc đầu
·         Giá trị timeout của kết nối
·         Cơ chế connection-pooling (xem mục 10.2)
·         Cơ chế xác thực dùng khi kết nối đến các cơ sở dữ liệu được bảo mật, bao gồm việc cung cấp username và password
Một khi đã được cấu hình, gọi phương thức Open của đối tượng kết nối để mở kết nối đến cơ sở dữ liệu. Kế đó, bạn có thể sử dụng đối tượng kết nối để thực thi những câu lệnh dựa vào data-source (sẽ được thảo luận trong mục 10.3). Các thuộc tính của đối tượng kết nối cũng cho phép bạn lấy thông tin về trạng thái của một kết nối và những thiết lập được sử dụng để mở kết nối. Khi đã hoàn tất một kết nối, bạn nên gọi phương thức Close để giải phóng các tài nguyên hệ thống và kết nối cơ sở dữ liệu nằm dưới. IDbConnection được thừa kế từ System.IDisposable, nghĩa là mỗi lớp kết nối sẽ hiện thực phương thức Dispose. Phương thức này sẽ tự động gọi Close, cho nên lệnh using là một cách rất rõ ràng và hiệu quả khi sử dụng đối tượng kết nối trong mã lệnh.
Để đạt được hiệu năng tối ưu trong việc truy cập dữ liệu thì phải mở kết nối cơ sở dữ liệu càng chậm càng tốt, và khi đã hoàn tất thì ngắt kết nối càng sớm càng tốt. Việc này bảo đảm rằng, bạn không truy xuất tới kết nối cơ sở dữ liệu trong một thời gian dài và mã lệnh có cơ hội cao nhất để giữ lấy kết nối. Điều này đặc biệt quan trọng nếu bạn đang sử dụng connection-pooling.
Đoạn mã dưới đây trình bày cách sử dụng lớp SqlConnection để mở một kết nối đến SQL Server đang chạy trên máy cục bộ có sử dụng Integrated Windows Security (bảo mật tích hợp với Windows). Để truy xuất đến một máy từ xa, chỉ cần thay đổi data-source từ localhost thành tên của đối tượng cơ sở dữ liệu.

// Tạo đối tượng SqlConnection rỗng.

using (SqlConnection con = new SqlConnection()) 
{
    // Cấu hình chuỗi kết nối của đối tượng SqlConnection.
    con.ConnectionString = 
        "Data Source = localhost;"+ // Đối tượng SQL Server cục bộ
        "Database = Northwind;" +   // Cơ sở dữ liệu mẫu Northwind
        "Integrated Security=SSPI"; // Integrated Windows Security
    // Mở kết nối cơ sở dữ liệu.
    con.Open();
    // Hiển thị thông tin về kết nối.
    if (con.State == ConnectionState.Open) 
{
        Console.WriteLine("SqlConnection Information:");
        Console.WriteLine("  Connection State = " + con.State);
        Console.WriteLine("  Connection String = " + con.ConnectionString);
        Console.WriteLine("  Database Source = " + con.DataSource);
        Console.WriteLine("  Database = " + con.Database);
        Console.WriteLine("  Server Version = " + con.ServerVersion);
        Console.WriteLine("  Workstation Id = " + con.WorkstationId);
        Console.WriteLine("  Timeout = " + con.ConnectionTimeout);
        Console.WriteLine("  Packet Size = " + con.PacketSize);
    } else {
        Console.WriteLine("SqlConnection failed to open.");
        Console.WriteLine("  Connection State = " + con.State);
    }
    // Cuối khối using, Dispose sẽ gọi Close.
}



Đoạn mã dưới đây trình bày một chuỗi kết nối dùng để mở một kết nối đến cơ sở dữ liệu ở trên (nếu bạn đang sử dụng OLE DB Data Provider để thực hiện kết nối):

// Tạo một đối tượng OleDbConnection rỗng.
using (OleDbConnection con = new OleDbConnection()) 
{
    // Cấu hình chuỗi kết nối của đối tượng OleDbConnection.
    con.ConnectionString = 
        "Provider = SQLOLEDB;" +         // OLE DB Provider for SQL Server
        "Data Source = localhost;" +     // Đối tượng SQL Server cục bộ
        "Initial Catalog = Northwind;" + // Cơ sở dữ liệu mẫu Northwind
        "Integrated Security=SSPI";      // Integrated Windows Security
    // Mở kết nối cơ sở dữ liệu.
    con.Open();

Bài đăng phổ biến