SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Tạo kết nối tới cơ sở dữ liệu                               Author : Xcross87   2007


Dưới đây là tổng quan về cách kết nối tới cơ sở dữ liệu MS SQL Server 2005.

Như ở kì trước các bạn đã biết về các lớp cung cấp kết nối tới dữ liệu (Data
Connection Provider Classes), tất cả đều sử dụng System.Data.IdbConnection
interface cho ứng dụng. Dưới đây là bảng tổng hợp lại các „data provider‟ được
cung cấp bởi Microsoft :

Data Provider                   Namespace                  Connection Class
ODBC                            System.Data.Odbc           OdbcConnection
OLE DB                          System.Data.Oledb          OledbConnection
Oracle                          System.Data.OracleClient   OracleConnection
SQL Server                      System.Data.SqlClient      SqlConnection
SQL Server CE                   System.Data.SqlServerCe    SqlCeConnection


Bây giờ hãy thử ứng dụng vào tạo một kết nối tới Microsoft SQL Server 2005 (bạn
phải setup cái này vào mấy trước đó) dùng lớp „SqlConnection‟. Dưới đây là một
ví dụ kết nối tới database qua máy chủ SQL Server 2005.

[code]
using System;
using System.Data;
using System.Data.SqlClient;

public class KetNoiSQLServer
{
    public static void Main()
    {
        // Tạo connection string để kết nối
        string connectionString = @"Server = .SQLEXPRESS;" +
                                   "Integrated Security = true";
        // Tạo một connection tới máy chủ
        SqlConnection conn = new SqlConnection(connectionString);

            // QUA TRINH KET NOI
            try
            {
                // Mở kết nối
                conn.Open();
                Console.WriteLine("Connection opened !");
            }
            catch (SqlException sqle)

                                       Page 1 of 11
Tạo kết nối tới cơ sở dữ liệu                             Author : Xcross87   2007


            {
                   // Thông báo biến cố khi kết nối
                   Console.WriteLine("Error: " + sqle.Message);
            }
            finally
            {
                // Đóng kết nối
                conn.Close();
                Console.WriteLine("Connection closed !");
            }
      }
}

[/code]

Phân tích đoạn code trên một chút :

_Phần đầu code ta khai báo tên miền và các lớp cần sử dụng để kết nối, ở đây ta
dùng lớp „SqlConnection‟ để kết nối cho nên dùng tên miền
„System.Data.SqlConnection‟.

_Sau đó tạo một chuỗi chứa thông tin tham số truyền khi kết nối, nôm na thì hiểu
là thông tin kết nối tới máy chủ. Giải thích ngắn gọn về chuỗi kết nối này

[code]
// Tạo connection string để kết nối
        string connectionString = @"Server = .SQLEXPRESS;" +
                                    "Integrated Security = true";
[/code]

Với : Server = .SQLEXPRESS; là tên server mà ta cần kết nối tới, ở đây mặc
định sau khi cài Microsoft SQL Server 2005 Express thì default thường là
SQLEXPRESS. Còn kí hiệu ở trước “ . “ thực chất là gọi tên máy chứa cơ sở dữ
liệu cần kết nối. Thông thường nếu bạn làm việc offline thì mặc định là „localhost‟.
Hai kí hiệu : “ . “ và “(local)” là tương đương nhau. Vì thế ở đoạn code trên bạn
có thể viết lại khai báo server là : @“Server = (local)SQLEXPRESS”

Với : Integrated Security = true đây là chỉ định cách kết nối tới cơ sở dữ
liệu, ở đây trên máy của tớ thì để Windows Authentication cho nên tham số
„Integrated Security‟ mang giá trị „True‟ như trên khi kết nối, nếu bạn không dùng


                                      Page 2 of 11
Tạo kết nối tới cơ sở dữ liệu                                Author : Xcross87   2007


Windows Authentication thì bạn phải cung cấp Username | Password đăng nhập
vào hệ cơ sở dữ liệu.

Còn nhiều tham số trong chuỗi kết nối ( connection string ) khác nhưng sẽ đề cập
sau chi tiết hơn về thông tin kết nối.

_Sau đó tạo một đối tượng chứa thông tin kết nối ( thông tin này nằm trong chuỗi
kết nối connection string ) :

[code]
// Tạo một connection tới máy chủ
        SqlConnection conn = new SqlConnection(connectionString);
[/code]

_Vậy là bạn đã có một đối tượng chứa thông tin kết nối đầy đủ. Việc tiếp theo là
„THỬ” kết nối tới cơ sở dữ liệu xem thế nào.

_Yêu cầu đối tượng mở kết nối tớ cơ sở dữ liệu.

[code]
try
            {
                   // Mở kết nối
                   conn.Open();
                   Console.WriteLine("Connection opened !");
            }
[/code]

_Nếu như trong trường hợp kết nối mà có lỗi thì kết nối tự động ngắt đi và dừng
chương trình. Nếu như ta không dùng cặp quan hệ „ try…catch…finally „ để kiểm
tra kết nối thì nếu gặp lỗi thì sẽ có thông báo lỗi và ta không biết được lỗi gì khi kết
nối vì vậy ở đây lỗi bắt được bị ném vào trong „catch‟ và in ra lỗi bắt được ( lỗi bắt
được luôn được ghi ở chế độ Debug nếu như bạn RUN chương trình ở Debug
mode chứ không phải là Release mode ).

[code]
catch (SqlException sqle)
        {
            // Thông báo biến cố khi kết nối
            Console.WriteLine("Error: " + sqle.Message);

                                      Page 3 of 11
Tạo kết nối tới cơ sở dữ liệu                              Author : Xcross87   2007


            }
[/code]

Lớp „SqlException‟ là lớp chứa thông tin về các lỗi bắt trong quá trình kết nối tới
hệ cơ sở dữ liệu SQL Server. Bạn có thể xem thông tin chi tiết hơn về các
Exception của SQL trong trang chủ MSDN.

_Cuối cùng khi kết nối thành công và không gặp trở ngại gì thì ta tiến hành công
việc trong thẻ finally. Ở đây là đóng kết nối.

[code]
finally
            {
                   // Đóng kết nối
                   conn.Close();
                   Console.WriteLine("Connection closed !");
            }
[/code]

_Chương trình tưởng chừng đơn giản đọc rất dễ hiểu nhưng nếu bạn có kiến thức
sâu hơn về kết nỗi và tương quan server/client sẽ thấy một số vấn đề ở đây. Tớ đưa
ra một số vấn đề mà tớ đã gặp :

       + Giả sử kết nối bị lỗi không thực hiện được thì kết quả ra màn hình chỉ có
thông báo lỗi thôi đùng không ? . Trả lới : Sai ! Có cả thông báo đóng kết nối nữa.
Lý do : vì thẻ „finally‟ dùng để đưa ra thao tác cuối cùng của công việc cho nên sau
khi thông báo lỗi xong nó sẽ nhảy tiếp tục thẻ „finally‟.

      + Nếu mà kết nối thế này có bị hao tổn tài nguyên máy không? Trả lời : Có !
Tốn cả 2 bên server và client. Nếu mà càng nhiều kết nối thực hiện thì hao tổn
càng nhiều và làm chậm server rất nhiều và nhiều lúc quá giới hạn cho phép sẽ
không thể thực hiện được kết nối nữa. Vì vậy sau khi mở kết nối thành công và
hoàn thành quá trình xử lý thông tin thì phải đóng kết nối ngay.

        + Làm cách nào đảm bảo đóng/mở kết nối đúng quy cách tránh ảnh hưởng
nhiều 2 bên server và client ? Trả lời : Bạn có thể đóng và mở kết nối ngay trong
khi „ try „ và cuối cùng đóng thêm một kết nối tại thẻ „finally‟. Bạn có thể tham
khảo code mẫu dưới đây :

         Code minh họa đóng/ mở kết nối an toàn :
                                     Page 4 of 11
Tạo kết nối tới cơ sở dữ liệu                             Author : Xcross87   2007


[code]
         // QUA TRINH KET NOI
            try
            {
                // Mở kết nối
                conn.Open();
                Console.WriteLine("Connection opened !");
                //
                // Xử lý công việc online
                //

                   // Đóng kết nối
                   conn.Close();

                   //
                   // Xử lý công việc offline
                   //

                   // Mở kết nối lần nứa
                   conn.Open();
                   //
                   // Xử lý công việc online
                   //

                   // Đóng lại kết nối
                   conn.Close();
            }
            catch (SqlException sqle)
            {
                // Thông báo biến cố khi kết nối
                Console.WriteLine("Error: " + sqle.Message);
            }
            finally
            {
                // Đóng kết nối
                conn.Close();
                Console.WriteLine("Connection closed !");
            }

[/code]

Nếu như khi kết nối mà SQL Server không xài chế độ Windows Authentication mà
có username | password riêng để truy cập (access) cơ sở dữ liệu (database) thì trong
chuỗi kết nối ( connection string ) bạn phải cung cấp username | password cho
thông tin kết nối. Dưới đây là một ví dụ dùng username | password để kết nối :
                                     Page 5 of 11
Tạo kết nối tới cơ sở dữ liệu                                     Author : Xcross87   2007


[code]
string connectionString = @"Server = .SQLEXPRESS; " +
                            "User ID = sa; " +
                            "Password = pete_87";

[/code]

Ở đây : „sa‟ là tên mặc định cho system administrator và „password‟ là tớ đặt.
Thông số này tùy thuộc vào thông số máy chủ được cài đặt. Bạn có thể có system
admin và không xài password. Lúc này password sẽ được mặc định (default) là
chuỗi rỗng (empty string) cho nên trong chuỗi kết nối bạn có thể để tham số là :

Password =;

Nhưng đây không phải một code tốt ^&^.

Dưới đây là bảng các tham số truyền trong chuỗi kết nối, cung cấp thông tin khi
kết nối tới máy chủ.

                                              Default
       Name                     Alias                  Allowed Value            Description
                                               Value
Application                                  .NET     Any string                Name of
Name                                         SqlClien                           Application
                                             t Data
                                             Provider
AttachDBFileNa Extended                      None     Any path                  Full path of
me              properties, initial                                             attachable
                file name                                                       database file
Connect timeout Connection          15                    0-32767               Seconds to
                Timeout                                                         wait to
                                                                                connect
Data Source              Server,Address,     None         Servername or         Name of the
                         Network                          network address       target SQL
                         Address                                                Server
                                                                                instance
Encrypt                                      False        True,false,           Use SSL
                                                          Yes,no                encryption
Initial Catalog          Database            None         Any database that     Database
                                                          exists on server      name
Integrated               Trusted_connect False            True,false,yes,no,    Authenticati
                                           Page 6 of 11
Tạo kết nối tới cơ sở dữ liệu                            Author : Xcross87   2007


security                 ion                     sspi                  on mode
Network library          Net        Dbmsso       Dbnmpntw,             Network.dll
                                    cn           Dbmsrpcn,
                                                 Dbmsadsn,
                                                 Dbmsgnet,
                                                 Dbmslpcn,
                                                 Dbmslpcn,
                                                 Dbmsspxn,
                                                 Dbmssocn
Packet Size                         8192         Multiple of 512       Network
                                                                       packet size
                                                                       in bytes
Password                 PWD        None         Any string            Password if
                                                                       not using
                                                                       win authen
Persist Security                    False        True, false, yes,     Sensitive
Info                                             no                    info should
                                                                       be passed
                                                                       back after
                                                                       connecting
User ID                  UID                     None                  Username if
                                                                       not using
                                                                       win authen
Workstation ID                      Local        Anystring             Workstation
                                    Comput                             connecting
                                    er Name                            to SQL
                                                                       Server


Ví dụ một vài tham số kết nối :

Data Source = .SQLEXPRESS

Server = .SQLEXPRESS

Address = .SQLEXPRESS

Addr = .SQLEXPRESS

Network Address = .SQLEXPRESS

                                  Page 7 of 11
Tạo kết nối tới cơ sở dữ liệu                           Author : Xcross87   2007


Chú ý là : như đã nói ở trên : .SQLEXPRESS tương đương với (local)EXPRESS

Thử áp dụng vào viết một ứng dụng Console báo cáo thông tin về kết nối.

Kết nối tới SQL Server dùng SqlConnection

Dùng code mẫu sau :

[code]
using System;
using System.Data;
using System.Data.SqlClient;


public class ThongTinKetNoi
{
    static void Main()
    {
        // Connection string
        string connString = @"Server = .SQLEXPRESS; " +
                             "Integrated Security = SSPI";

        // Create connection
        SqlConnection conn = new SqlConnection(connString);
        try
        {
            // Open connection
            conn.Open();
            Console.WriteLine("Connection opened.");
            // Display connection properties
            Console.WriteLine("Connection Properties:");
            Console.WriteLine("tConnection String:
{0}",conn.ConnectionString);
            Console.WriteLine("tDatabase: {0}",conn.Database);
            Console.WriteLine("tDataSource:
{0}",conn.DataSource);
            Console.WriteLine("tServerVersion:
{0}",conn.ServerVersion);
            Console.WriteLine("tState: {0}",conn.State);
            Console.WriteLine("tWorkstationId:
{0}",conn.WorkstationId);
        }
        catch (SqlException e)
        {
            // Display error
            Console.WriteLine("Error: " + e);
                                   Page 8 of 11
Tạo kết nối tới cơ sở dữ liệu                             Author : Xcross87   2007


            }
            finally
            {
                // Close connection
                conn.Close();
                Console.WriteLine("Connection closed.");
            }
      }
}

[/code]

Đọc qua code bạn có thể hiểu code dùng như thế nào. Ở đây mình ghi chú thêm
một vài điều

_Nếu khi kết nối bạn không chỉ rõ là kết nối tới database nào thì mặc định database
sẽ là : master

_Nếu muốn thay đổi database kết nối thì bạn thêm tham số „Database = db_name;‟
vào trong chuỗi kết nối.

_Nếu bạn đưa vào một database_name không tồn tại trong server thì sẽ gặp thông
báo lỗi :

“System.Data.SqlClient.SqlException : Cannot open database „db_name‟ requested
by the login. The login failed.”

_Workstation chỉ định tên của máy mà làm việc với máy chủ database cho nên mỗi
máy kết nối tới sẽ thu kết quả là tên của máy. Nếu mà bạn muốn tất cả các máy kết
nối tới máy chủ SQL có một Workstation ID giống nhau thì trong chuỗi kết nối
(connection string) bạn thêm tham số cho Workstation ID. Ví dụ :

Workstation ID = Vo Danh Tieu Tot;

Kết nối tới SQL Server dùng OleDbConnection

Bạn nên đọc bài : ADO.NET cơ bản do tớ viết trước rồi tham khảo ở đây cũng
được.

Như đã viết ở đầu bài, khi kết nối ta có thể luân chuyển giữa các nhà cung cấp kết
nối để kết nối tới cơ sở dữ liệu. Ví dụ ở trên là kết nối tới SQL Server dùng lớp
„SqlConnection‟.

                                    Page 9 of 11
Tạo kết nối tới cơ sở dữ liệu                          Author : Xcross87   2007


Phần này tương tự sẽ dùng lớp OleDbConnection để kết nối tới SQL Server.

[code]
using System;
using System.Data;
using System.Data.OleDb;


public class KetNoiDungOleDbConnection
{
    static void Main()
    {
        // Connection string
        string connString = @"Provider = SqlOleDb;
                              Data Source = .SQLEXPRESS;
                              Integrated Security = SSPI";

        // Create connection
        OleDbConnection conn = new OleDbConnection(connString);
        try
        {
            // Open connection
            conn.Open();
            Console.WriteLine("Connection opened.");
            // Display connection properties
            Console.WriteLine("Connection Properties:");
            Console.WriteLine("tConnection String:
{0}",conn.ConnectionString);
            Console.WriteLine("tDatabase: {0}",conn.Database);
            Console.WriteLine("tDataSource:
{0}",conn.DataSource);
            Console.WriteLine("tServerVersion:
{0}",conn.ServerVersion);
            Console.WriteLine("tState: {0}",conn.State);
        }
        catch (OleDbException e)
        {
            // Display error
            Console.WriteLine("Error: " + e);
        }
        finally
        {
            // Close connection
            conn.Close();
            Console.WriteLine("Connection closed.");
        }

                                  Page 10 of 11
Tạo kết nối tới cơ sở dữ liệu                            Author : Xcross87   2007


      }
}

[/code]

Kết nối tới cơ sở dữ liệu không khó và phức tạp nhưng đòi hỏi kĩ năng và biết cách
vận dụng khi kết nối một cách hợp lý, tránh hao tổn tài nguyên máy.

Kết thúc bài về „tạo kết nối tới cơ sở dữ liệu




                                     Page 11 of 11

Weitere ähnliche Inhalte

Was ist angesagt?

Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Hiển Phùng
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostinglaonap166
 
dCai dat va su dung kaspersky 8.0 for exchange server
dCai dat va su dung kaspersky 8.0 for exchange serverdCai dat va su dung kaspersky 8.0 for exchange server
dCai dat va su dung kaspersky 8.0 for exchange serverNguyễn Bảo Quốc
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaBrand Xanh
 
Sile bao cao ck
Sile bao cao ckSile bao cao ck
Sile bao cao ckDuy Nguyen
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vnJenny Nguyen
 

Was ist angesagt? (8)

Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hosting
 
dCai dat va su dung kaspersky 8.0 for exchange server
dCai dat va su dung kaspersky 8.0 for exchange serverdCai dat va su dung kaspersky 8.0 for exchange server
dCai dat va su dung kaspersky 8.0 for exchange server
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với java
 
Sile bao cao ck
Sile bao cao ckSile bao cao ck
Sile bao cao ck
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Laptrinh jdbc
Laptrinh jdbcLaptrinh jdbc
Laptrinh jdbc
 
Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vn
 

Ähnlich wie 3.tao mot ket noi toi co so du lieu dung c#

6.adapterset
6.adapterset6.adapterset
6.adaptersetDao Uit
 
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...MasterCode.vn
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...zzsunzz
 
7.databinding
7.databinding7.databinding
7.databindingDao Uit
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Linh Nguyen
 
De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1Nahudi Nguyễn
 
Mo hinh ado.net
Mo hinh ado.netMo hinh ado.net
Mo hinh ado.netXuan Tran
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia clientLee Nam Nguyen
 
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...MasterCode.vn
 
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...MasterCode.vn
 

Ähnlich wie 3.tao mot ket noi toi co so du lieu dung c# (20)

Cach su dung data reader
Cach su dung data readerCach su dung data reader
Cach su dung data reader
 
6.adapterset
6.adapterset6.adapterset
6.adapterset
 
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
S vnet.vn 51. [silde bài giảng] lập trình trên môi trường windows với ado.net...
 
Data provider
Data providerData provider
Data provider
 
7.databinding
7.databinding7.databinding
7.databinding
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)
 
Ung dung web chuong 6
Ung dung web  chuong 6Ung dung web  chuong 6
Ung dung web chuong 6
 
LinQ
LinQLinQ
LinQ
 
De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1
 
access
accessaccess
access
 
Mo hinh ado.net
Mo hinh ado.netMo hinh ado.net
Mo hinh ado.net
 
Báo cáo tuần đồ án
Báo cáo tuần đồ ánBáo cáo tuần đồ án
Báo cáo tuần đồ án
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia client
 
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
 
Aspnet 3.5 _02
Aspnet 3.5 _02Aspnet 3.5 _02
Aspnet 3.5 _02
 
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
 

3.tao mot ket noi toi co so du lieu dung c#

  • 1. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 Dưới đây là tổng quan về cách kết nối tới cơ sở dữ liệu MS SQL Server 2005. Như ở kì trước các bạn đã biết về các lớp cung cấp kết nối tới dữ liệu (Data Connection Provider Classes), tất cả đều sử dụng System.Data.IdbConnection interface cho ứng dụng. Dưới đây là bảng tổng hợp lại các „data provider‟ được cung cấp bởi Microsoft : Data Provider Namespace Connection Class ODBC System.Data.Odbc OdbcConnection OLE DB System.Data.Oledb OledbConnection Oracle System.Data.OracleClient OracleConnection SQL Server System.Data.SqlClient SqlConnection SQL Server CE System.Data.SqlServerCe SqlCeConnection Bây giờ hãy thử ứng dụng vào tạo một kết nối tới Microsoft SQL Server 2005 (bạn phải setup cái này vào mấy trước đó) dùng lớp „SqlConnection‟. Dưới đây là một ví dụ kết nối tới database qua máy chủ SQL Server 2005. [code] using System; using System.Data; using System.Data.SqlClient; public class KetNoiSQLServer { public static void Main() { // Tạo connection string để kết nối string connectionString = @"Server = .SQLEXPRESS;" + "Integrated Security = true"; // Tạo một connection tới máy chủ SqlConnection conn = new SqlConnection(connectionString); // QUA TRINH KET NOI try { // Mở kết nối conn.Open(); Console.WriteLine("Connection opened !"); } catch (SqlException sqle) Page 1 of 11
  • 2. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 { // Thông báo biến cố khi kết nối Console.WriteLine("Error: " + sqle.Message); } finally { // Đóng kết nối conn.Close(); Console.WriteLine("Connection closed !"); } } } [/code] Phân tích đoạn code trên một chút : _Phần đầu code ta khai báo tên miền và các lớp cần sử dụng để kết nối, ở đây ta dùng lớp „SqlConnection‟ để kết nối cho nên dùng tên miền „System.Data.SqlConnection‟. _Sau đó tạo một chuỗi chứa thông tin tham số truyền khi kết nối, nôm na thì hiểu là thông tin kết nối tới máy chủ. Giải thích ngắn gọn về chuỗi kết nối này [code] // Tạo connection string để kết nối string connectionString = @"Server = .SQLEXPRESS;" + "Integrated Security = true"; [/code] Với : Server = .SQLEXPRESS; là tên server mà ta cần kết nối tới, ở đây mặc định sau khi cài Microsoft SQL Server 2005 Express thì default thường là SQLEXPRESS. Còn kí hiệu ở trước “ . “ thực chất là gọi tên máy chứa cơ sở dữ liệu cần kết nối. Thông thường nếu bạn làm việc offline thì mặc định là „localhost‟. Hai kí hiệu : “ . “ và “(local)” là tương đương nhau. Vì thế ở đoạn code trên bạn có thể viết lại khai báo server là : @“Server = (local)SQLEXPRESS” Với : Integrated Security = true đây là chỉ định cách kết nối tới cơ sở dữ liệu, ở đây trên máy của tớ thì để Windows Authentication cho nên tham số „Integrated Security‟ mang giá trị „True‟ như trên khi kết nối, nếu bạn không dùng Page 2 of 11
  • 3. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 Windows Authentication thì bạn phải cung cấp Username | Password đăng nhập vào hệ cơ sở dữ liệu. Còn nhiều tham số trong chuỗi kết nối ( connection string ) khác nhưng sẽ đề cập sau chi tiết hơn về thông tin kết nối. _Sau đó tạo một đối tượng chứa thông tin kết nối ( thông tin này nằm trong chuỗi kết nối connection string ) : [code] // Tạo một connection tới máy chủ SqlConnection conn = new SqlConnection(connectionString); [/code] _Vậy là bạn đã có một đối tượng chứa thông tin kết nối đầy đủ. Việc tiếp theo là „THỬ” kết nối tới cơ sở dữ liệu xem thế nào. _Yêu cầu đối tượng mở kết nối tớ cơ sở dữ liệu. [code] try { // Mở kết nối conn.Open(); Console.WriteLine("Connection opened !"); } [/code] _Nếu như trong trường hợp kết nối mà có lỗi thì kết nối tự động ngắt đi và dừng chương trình. Nếu như ta không dùng cặp quan hệ „ try…catch…finally „ để kiểm tra kết nối thì nếu gặp lỗi thì sẽ có thông báo lỗi và ta không biết được lỗi gì khi kết nối vì vậy ở đây lỗi bắt được bị ném vào trong „catch‟ và in ra lỗi bắt được ( lỗi bắt được luôn được ghi ở chế độ Debug nếu như bạn RUN chương trình ở Debug mode chứ không phải là Release mode ). [code] catch (SqlException sqle) { // Thông báo biến cố khi kết nối Console.WriteLine("Error: " + sqle.Message); Page 3 of 11
  • 4. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 } [/code] Lớp „SqlException‟ là lớp chứa thông tin về các lỗi bắt trong quá trình kết nối tới hệ cơ sở dữ liệu SQL Server. Bạn có thể xem thông tin chi tiết hơn về các Exception của SQL trong trang chủ MSDN. _Cuối cùng khi kết nối thành công và không gặp trở ngại gì thì ta tiến hành công việc trong thẻ finally. Ở đây là đóng kết nối. [code] finally { // Đóng kết nối conn.Close(); Console.WriteLine("Connection closed !"); } [/code] _Chương trình tưởng chừng đơn giản đọc rất dễ hiểu nhưng nếu bạn có kiến thức sâu hơn về kết nỗi và tương quan server/client sẽ thấy một số vấn đề ở đây. Tớ đưa ra một số vấn đề mà tớ đã gặp : + Giả sử kết nối bị lỗi không thực hiện được thì kết quả ra màn hình chỉ có thông báo lỗi thôi đùng không ? . Trả lới : Sai ! Có cả thông báo đóng kết nối nữa. Lý do : vì thẻ „finally‟ dùng để đưa ra thao tác cuối cùng của công việc cho nên sau khi thông báo lỗi xong nó sẽ nhảy tiếp tục thẻ „finally‟. + Nếu mà kết nối thế này có bị hao tổn tài nguyên máy không? Trả lời : Có ! Tốn cả 2 bên server và client. Nếu mà càng nhiều kết nối thực hiện thì hao tổn càng nhiều và làm chậm server rất nhiều và nhiều lúc quá giới hạn cho phép sẽ không thể thực hiện được kết nối nữa. Vì vậy sau khi mở kết nối thành công và hoàn thành quá trình xử lý thông tin thì phải đóng kết nối ngay. + Làm cách nào đảm bảo đóng/mở kết nối đúng quy cách tránh ảnh hưởng nhiều 2 bên server và client ? Trả lời : Bạn có thể đóng và mở kết nối ngay trong khi „ try „ và cuối cùng đóng thêm một kết nối tại thẻ „finally‟. Bạn có thể tham khảo code mẫu dưới đây : Code minh họa đóng/ mở kết nối an toàn : Page 4 of 11
  • 5. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 [code] // QUA TRINH KET NOI try { // Mở kết nối conn.Open(); Console.WriteLine("Connection opened !"); // // Xử lý công việc online // // Đóng kết nối conn.Close(); // // Xử lý công việc offline // // Mở kết nối lần nứa conn.Open(); // // Xử lý công việc online // // Đóng lại kết nối conn.Close(); } catch (SqlException sqle) { // Thông báo biến cố khi kết nối Console.WriteLine("Error: " + sqle.Message); } finally { // Đóng kết nối conn.Close(); Console.WriteLine("Connection closed !"); } [/code] Nếu như khi kết nối mà SQL Server không xài chế độ Windows Authentication mà có username | password riêng để truy cập (access) cơ sở dữ liệu (database) thì trong chuỗi kết nối ( connection string ) bạn phải cung cấp username | password cho thông tin kết nối. Dưới đây là một ví dụ dùng username | password để kết nối : Page 5 of 11
  • 6. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 [code] string connectionString = @"Server = .SQLEXPRESS; " + "User ID = sa; " + "Password = pete_87"; [/code] Ở đây : „sa‟ là tên mặc định cho system administrator và „password‟ là tớ đặt. Thông số này tùy thuộc vào thông số máy chủ được cài đặt. Bạn có thể có system admin và không xài password. Lúc này password sẽ được mặc định (default) là chuỗi rỗng (empty string) cho nên trong chuỗi kết nối bạn có thể để tham số là : Password =; Nhưng đây không phải một code tốt ^&^. Dưới đây là bảng các tham số truyền trong chuỗi kết nối, cung cấp thông tin khi kết nối tới máy chủ. Default Name Alias Allowed Value Description Value Application .NET Any string Name of Name SqlClien Application t Data Provider AttachDBFileNa Extended None Any path Full path of me properties, initial attachable file name database file Connect timeout Connection 15 0-32767 Seconds to Timeout wait to connect Data Source Server,Address, None Servername or Name of the Network network address target SQL Address Server instance Encrypt False True,false, Use SSL Yes,no encryption Initial Catalog Database None Any database that Database exists on server name Integrated Trusted_connect False True,false,yes,no, Authenticati Page 6 of 11
  • 7. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 security ion sspi on mode Network library Net Dbmsso Dbnmpntw, Network.dll cn Dbmsrpcn, Dbmsadsn, Dbmsgnet, Dbmslpcn, Dbmslpcn, Dbmsspxn, Dbmssocn Packet Size 8192 Multiple of 512 Network packet size in bytes Password PWD None Any string Password if not using win authen Persist Security False True, false, yes, Sensitive Info no info should be passed back after connecting User ID UID None Username if not using win authen Workstation ID Local Anystring Workstation Comput connecting er Name to SQL Server Ví dụ một vài tham số kết nối : Data Source = .SQLEXPRESS Server = .SQLEXPRESS Address = .SQLEXPRESS Addr = .SQLEXPRESS Network Address = .SQLEXPRESS Page 7 of 11
  • 8. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 Chú ý là : như đã nói ở trên : .SQLEXPRESS tương đương với (local)EXPRESS Thử áp dụng vào viết một ứng dụng Console báo cáo thông tin về kết nối. Kết nối tới SQL Server dùng SqlConnection Dùng code mẫu sau : [code] using System; using System.Data; using System.Data.SqlClient; public class ThongTinKetNoi { static void Main() { // Connection string string connString = @"Server = .SQLEXPRESS; " + "Integrated Security = SSPI"; // Create connection SqlConnection conn = new SqlConnection(connString); try { // Open connection conn.Open(); Console.WriteLine("Connection opened."); // Display connection properties Console.WriteLine("Connection Properties:"); Console.WriteLine("tConnection String: {0}",conn.ConnectionString); Console.WriteLine("tDatabase: {0}",conn.Database); Console.WriteLine("tDataSource: {0}",conn.DataSource); Console.WriteLine("tServerVersion: {0}",conn.ServerVersion); Console.WriteLine("tState: {0}",conn.State); Console.WriteLine("tWorkstationId: {0}",conn.WorkstationId); } catch (SqlException e) { // Display error Console.WriteLine("Error: " + e); Page 8 of 11
  • 9. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 } finally { // Close connection conn.Close(); Console.WriteLine("Connection closed."); } } } [/code] Đọc qua code bạn có thể hiểu code dùng như thế nào. Ở đây mình ghi chú thêm một vài điều _Nếu khi kết nối bạn không chỉ rõ là kết nối tới database nào thì mặc định database sẽ là : master _Nếu muốn thay đổi database kết nối thì bạn thêm tham số „Database = db_name;‟ vào trong chuỗi kết nối. _Nếu bạn đưa vào một database_name không tồn tại trong server thì sẽ gặp thông báo lỗi : “System.Data.SqlClient.SqlException : Cannot open database „db_name‟ requested by the login. The login failed.” _Workstation chỉ định tên của máy mà làm việc với máy chủ database cho nên mỗi máy kết nối tới sẽ thu kết quả là tên của máy. Nếu mà bạn muốn tất cả các máy kết nối tới máy chủ SQL có một Workstation ID giống nhau thì trong chuỗi kết nối (connection string) bạn thêm tham số cho Workstation ID. Ví dụ : Workstation ID = Vo Danh Tieu Tot; Kết nối tới SQL Server dùng OleDbConnection Bạn nên đọc bài : ADO.NET cơ bản do tớ viết trước rồi tham khảo ở đây cũng được. Như đã viết ở đầu bài, khi kết nối ta có thể luân chuyển giữa các nhà cung cấp kết nối để kết nối tới cơ sở dữ liệu. Ví dụ ở trên là kết nối tới SQL Server dùng lớp „SqlConnection‟. Page 9 of 11
  • 10. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 Phần này tương tự sẽ dùng lớp OleDbConnection để kết nối tới SQL Server. [code] using System; using System.Data; using System.Data.OleDb; public class KetNoiDungOleDbConnection { static void Main() { // Connection string string connString = @"Provider = SqlOleDb; Data Source = .SQLEXPRESS; Integrated Security = SSPI"; // Create connection OleDbConnection conn = new OleDbConnection(connString); try { // Open connection conn.Open(); Console.WriteLine("Connection opened."); // Display connection properties Console.WriteLine("Connection Properties:"); Console.WriteLine("tConnection String: {0}",conn.ConnectionString); Console.WriteLine("tDatabase: {0}",conn.Database); Console.WriteLine("tDataSource: {0}",conn.DataSource); Console.WriteLine("tServerVersion: {0}",conn.ServerVersion); Console.WriteLine("tState: {0}",conn.State); } catch (OleDbException e) { // Display error Console.WriteLine("Error: " + e); } finally { // Close connection conn.Close(); Console.WriteLine("Connection closed."); } Page 10 of 11
  • 11. Tạo kết nối tới cơ sở dữ liệu Author : Xcross87 2007 } } [/code] Kết nối tới cơ sở dữ liệu không khó và phức tạp nhưng đòi hỏi kĩ năng và biết cách vận dụng khi kết nối một cách hợp lý, tránh hao tổn tài nguyên máy. Kết thúc bài về „tạo kết nối tới cơ sở dữ liệu Page 11 of 11