Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Tạo một kết nối tới database trong lập trình C#

  1. #1
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,434

    Talking Tạo một kết nối tới database trong lập trình C#

    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 :
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		photo1.jpg
Lần xem:	336
Size:		32.7 KB
ID:		5091

    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.
    Visual C# Code:
    1. using System;
    2. using System.Data;
    3. using System.Data.SqlClient;
    4.  
    5. public class KetNoiSQLServer
    6. {
    7.     public static void Main()
    8.     {
    9.         // Tạo connection string để kết nối
    10.         string connectionString = @"Server = .\SQLEXPRESS;" +
    11.                                    "Integrated Security = true";
    12.         // Tạo một connection tới máy chủ
    13.         SqlConnection conn = new SqlConnection(connectionString);
    14.        
    15.         // QUA TRINH KET NOI
    16.         try
    17.         {
    18.             // Mở kết nối
    19.             conn.Open();
    20.             Console.WriteLine("Connection opened !");
    21.         }
    22.         catch (SqlException sqle)
    23.         {
    24.             // Thông báo biến cố khi kết nối
    25.             Console.WriteLine("Error: " + sqle.Message);
    26.         }
    27.         finally
    28.         {
    29.             // Đóng kết nối
    30.             conn.Close();
    31.             Console.WriteLine("Connection closed !");
    32.         }
    33.     }
    34. }

    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
    Visual C# Code:
    1. // Tạo connection string để kết nối
    2.         string connectionString = @"Server = .\SQLEXPRESS;" +
    3.                                    "Integrated Security = true";
    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 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);
    _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.

    Visual C# Code:
    1.         {
    2.             // Mở kết nối
    3.             conn.Open();
    4.             Console.WriteLine("Connection opened !");
    5.         }

    _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 ).

    Visual C# Code:
    1. catch (SqlException sqle)
    2.         {
    3.             // Thông báo biến cố khi kết nối
    4.             Console.WriteLine("Error: " + sqle.Message);
    5.         }

    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.

    Visual C# Code:
    1.         {
    2.             // Đóng kết nối
    3.             conn.Close();
    4.             Console.WriteLine("Connection closed !");
    5.         }

    _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 :

    Visual C# Code:
    1. // QUA TRINH KET NOI
    2.         try
    3.         {
    4.             // Mở kết nối
    5.             conn.Open();
    6.             Console.WriteLine("Connection opened !");
    7.             //
    8.             // Xử lý công việc online
    9.             //
    10.            
    11.             // Đóng kết nối
    12.             conn.Close();
    13.            
    14.             //
    15.             // Xử lý công việc offline
    16.             //
    17.  
    18.             // Mở kết nối lần nứa
    19.             conn.Open();
    20.             //
    21.             // Xử lý công việc online
    22.             //
    23.  
    24.             // Đóng lại kết nối
    25.             conn.Close();
    26.         }
    27.         catch (SqlException sqle)
    28.         {
    29.             // Thông báo biến cố khi kết nối
    30.             Console.WriteLine("Error: " + sqle.Message);
    31.         }
    32.         finally
    33.         {
    34.             // Đóng kết nối
    35.             conn.Close();
    36.             Console.WriteLine("Connection closed !");
    37.         }
    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 :
    Visual C# Code:
    1. string connectionString = @"Server = .\SQLEXPRESS; " +
    2.                             "User ID = sa; " +
    3.                             "Password = pete_87";
    Ở đâ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ủ.
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		photo2.jpg
Lần xem:	311
Size:		65.7 KB
ID:		5092

    Ví dụ một vài tham số kết nối :
    Data Source = .\SQLEXPRESS
    Server = .\SQLEXPRESS
    Address = .\SQLEXPRESS
    Addr = .\SQLEXPRESS
    Network Address = .\SQLEXPRESS
    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 :
    Visual C# Code:
    1. using System;
    2. using System.Data;
    3. using System.Data.SqlClient;
    4.  
    5.  
    6. public class ThongTinKetNoi
    7. {
    8.     static void Main()
    9.     {
    10.         // Connection string
    11.         string connString = @"Server = .\SQLEXPRESS; " +
    12.                              "Integrated Security = SSPI";
    13.                
    14.         // Create connection
    15.         SqlConnection conn = new SqlConnection(connString);
    16.         try
    17.         {
    18.             // Open connection
    19.             conn.Open();
    20.             Console.WriteLine("Connection opened.");
    21.             // Display connection properties
    22.             Console.WriteLine("Connection Properties:");
    23.             Console.WriteLine("\tConnection String: {0}",conn.ConnectionString);
    24.             Console.WriteLine("\tDatabase: {0}",conn.Database);
    25.             Console.WriteLine("\tDataSource: {0}",conn.DataSource);
    26.             Console.WriteLine("\tServerVersion: {0}",conn.ServerVersion);
    27.             Console.WriteLine("\tState: {0}",conn.State);
    28.             Console.WriteLine("\tWorkstationId: {0}",conn.WorkstationId);
    29.         }
    30.         catch (SqlException e)
    31.         {
    32.             // Display error
    33.             Console.WriteLine("Error: " + e);
    34.         }
    35.         finally
    36.         {
    37.             // Close connection
    38.             conn.Close();
    39.             Console.WriteLine("Connection closed.");
    40.         }
    41.     }
    42. }
    Đọ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’.
    Phần này tương tự sẽ dùng lớp OleDbConnection để kết nối tới SQL Server.
    Visual C# Code:
    1. using System;
    2. using System.Data;
    3. using System.Data.OleDb;
    4.  
    5.  
    6. public class KetNoiDungOleDbConnection
    7. {
    8.     static void Main()
    9.     {
    10.         // Connection string
    11.         string connString = @"Provider = SqlOleDb;
    12.                              Data Source = .\SQLEXPRESS;
    13.                              Integrated Security = SSPI";
    14.                
    15.         // Create connection
    16.         OleDbConnection conn = new OleDbConnection(connString);
    17.         try
    18.         {
    19.             // Open connection
    20.             conn.Open();
    21.             Console.WriteLine("Connection opened.");
    22.             // Display connection properties
    23.             Console.WriteLine("Connection Properties:");
    24.             Console.WriteLine("\tConnection String: {0}",conn.ConnectionString);
    25.             Console.WriteLine("\tDatabase: {0}",conn.Database);
    26.             Console.WriteLine("\tDataSource: {0}",conn.DataSource);
    27.             Console.WriteLine("\tServerVersion: {0}",conn.ServerVersion);
    28.             Console.WriteLine("\tState: {0}",conn.State);            
    29.         }
    30.         catch (OleDbException e)
    31.         {
    32.             // Display error
    33.             Console.WriteLine("Error: " + e);
    34.         }
    35.         finally
    36.         {
    37.             // Close connection
    38.             conn.Close();
    39.             Console.WriteLine("Connection closed.");
    40.         }
    41.     }
    42. }

    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

    Mục lục:
    1. Giới thiệu cơ bản ngôn ngữ SQL
    2. Giới thiệu cơ bản về ADO.NET
    3. Tạo kết nối tới database
    4. Thực thi câu lệnh SQL
    5. Xử lý kết quả với Data Reader
    6. Cách xử lý dữ liệu với Data Adapter và DataSet
    7. Giới thiệu về DataBinding
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 27-07-2007 lúc 04:34 PM.
    None!

  2. #2
    Ngày gia nhập
    07 2007
    Bài viết
    44

    Sướng chưa, bạn có lòng ghê, thế là các bạn khác có thể tìm hiểu được nhanh rồi, theo mình nghĩ, đây là cách học của pete, vừa học vừa đúc kết cho mình sau đó chia sẽ cho mọi người, mình xin góp ý 1 chút, nên chỉ các bạn kết nối 1 file Access trước vì sợ sẽ không có môi trường Server để thực hành ngay!

  3. #3
    Ngày gia nhập
    08 2009
    Nơi ở
    C:\Documents and Settings\ME\My Documents\Visual Studio 2010
    Bài viết
    516

    Bài viết này đúng là khá chi tiết rồi. Tóm lại là rất hay và rất cần cho những ai bắt đầu học. Thật đáng khen!

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    5

    Mặc định Tạo kết nối tới Database Của máy cùng mạng lan

    Help !
    Mình Có 2 máy .
    Pc1 :Cài SQL Server 2005 , chứa csdl "ABC"
    Pc2
    Mình Muốn pc2 kết nối tới csdl "ABC" thì Phải làm thế nào.

  5. #5
    Ngày gia nhập
    04 2009
    Nơi ở
    Hồ Chí Minh
    Bài viết
    59

    Bạn Xcross cho mình hỏi ?

    Máy mình cài sql server express 2008, server name: VNN\SQLEXPRESS, không có password

    Dậy mình phải khai báo chuổi Connectionstring như thế nào???

    Mình muốn làm một ứng dụng C# 2008 console để hiển thị cột customers trong CSDL NORTHWIND thì mình phải cài đặt NORTHWIND như thế nào.

    Thật sự mình chưa hiểu bản chất nên còn mơ hồ lắm, mong được bạn mở nút thắt này cho mình

    Cảm ơn nhiều nhé !

  6. #6
    Ngày gia nhập
    01 2010
    Bài viết
    4

    Mặc định Tạo một kết nối tới database trong lập trình C#

    bạn thử khai báo thế này xem: string connString = @"Server = VNN\SQLEXPRESS; uid=sa; pwd=;Integrated Security = SSPI";

  7. #7
    Ngày gia nhập
    07 2010
    Bài viết
    6

    Cám ơn anh nhiều, bài anh hướng dẫn và chú thích chi tiết quá, em đang học C#, tuy chưa học đến đây nhưng cũng gần đến rùi ^_^
    Đọc tuy ko hiểu hết nhưng cũng mường tượng dc phần nào

  8. #8
    Ngày gia nhập
    01 2011
    Bài viết
    8

    Angry Connection

    SqlConnection con = new SqlConnection("server=.\\sqlexpress;database=HR;in tegrated security=true");
    con.Open();

    Đang sử dụng quyền của Windows kết nối!

  9. #9
    Ngày gia nhập
    07 2010
    Bài viết
    6

    Topic còn những bài nào hay chia sẽ lên diễn đàn tham khảo với
    Đã được chỉnh sửa lần cuối bởi oahqnam8045 : 02-07-2012 lúc 04:33 PM.

  10. #10
    Ngày gia nhập
    11 2011
    Bài viết
    3

    Question Kết nối tới cơ sở dữ liệu trong project

    Mình đang thắc mắc. Thay vì mình kết nối tới SQL server thì mình lại muốn kết nối tới cơ sở dữ liệu trong Project luôn, mà trong chuỗi connectionstring mình không biết phải ghi gì để vừa có thể kết nối được với máy mình và máy tính khác. Mong mọi người giúp đỡ

Các đề tài tương tự

  1. MS SQL Lỗi Cách sử dụng replication trong sql server 2012 để đồng bộ 2 database thành 1 database?
    Gửi bởi btk1902 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 22-07-2013, 02:24 PM
  2. MS SQL Lỗi Không attach được database trong sql 2005, lỗi: not able to access database under current security context
    Gửi bởi hugo158 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 19-04-2013, 02:51 AM
  3. Cách tạo database trong Oracle Database 10g Express Edition?
    Gửi bởi trangchuvn_2000 trong diễn đàn Thắc mắc Oracle
    Trả lời: 5
    Bài viết cuối: 18-06-2012, 06:25 PM
  4. ADO.NET Restore database SQL 2005 lỗi: Exclusive access could not be obtained because the database is in use
    Gửi bởi phuongnam_bx trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 05-11-2011, 01:49 PM
  5. Xử lý database trong mạng lan sử dụng Access Database?
    Gửi bởi tesulakata trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 24-10-2010, 11:09 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn