Truy cập cơ sở dữ liệu qua C# ADO.NET

Trong bài viết này chúng tôi sẽ giới thiệu cho các bạn cách truy cập cơ sở dữ liệu qua C# ADO.NET.

Cơ sở dữ liệu và ngôn ngữ hướng đối tượng

Trước khi các máy tính mini và các PC xuất hiện, thế giới CNTT đơn giản hơn rất nhiều. Thời gian đó người ta cho rằng chỉ có các tổ chức rất lớn mới cần đến công nghệ máy tính. Tuy nhiên một vài năm đây, tất cả chúng ta đều có thể sở hữu những chiếc điện thoại di động với sức mạnh tính toán đủ mạnh để có thể xử lý dữ liệu cho một quá trình bắn tên lửa lên mặt trăng. Và cho đến ngày nay, sức mạnh tính toán, phần mềm, khả năng lưu trữ và băng thông, tất cả đều là mặt hàng có thể trao đổi. Mặc dù vậy vẫn có một điều khá đáng quý trong lĩnh vực máy tính. Vấn đề ở đây là, sự thiếu hụt một nền tảng phổ dụng cũng là một cách để thúc đẩy sự phát minh và sáng tạo trong lĩnh vực rộng hơn. Dưới dạng các chuẩn phần mềm, chúng ta có một danh sách những lựa chọn ấn tượng, hãy xem sự da dạng của mã nguồn mở và các nền tảng hết sức phổ biến như Linux và iPhone. Nếu chỉ có một hệ điều hành và một ngôn ngữ lập trình chính thì cũng sẽ có ít sự cạnh tranh – điều đó cũng thường đi đôi với việc có ít sự lựa chọn.

Đối với thế giới các cơ sở dữ liệu quan hệ cũng có một loạt các sản phẩm cạnh tranh. Sự truy cập bằng chương trình vào các sản phẩm cơ sở dữ liệu này cũng hiện diện nhiều sự lựa chọn —Java Persistence API (JPA)/Hibernate, C++, C#, Java,… Trong bài viết này, chúng tôi sẽ khảo sát công nghệ C# và ADO.NET trong một trường hợp đặc biệt, mục đích nhằm là để xem các công nghệ này có thể cung cấp những gì cho các nhà lập trình. Tuy nhiên nếu bạn chưa có nhiều kiến thức về cơ sở dữ liệu, cũng không nên quá lo lắng vì chúng tôi sẽ giới thiệu từ những vấn đề cơ bản nhất.

Lưu ý: Mã nguồn cho bài viết này hoàn toàn có thể download tại đây với tư cách một giải pháp C# cho Microsoft Visual C# 2008 Express Edition. Nếu bạn muốn tự chạy mã nguồn này, chỉ cần giải nén các file vào một thư mục, chẳng hạn như C:\dbcode. Sau đó mở file giải pháp mang tên DBConsoleApplication.sln trong Microsoft Visual C# 2008 Express Edition. Thao tác này sẽ tự động xây dựng một mã nguồn và tạo các thực thi cần thiết.

Sau đây chúng ta sẽ can thiệp và triển khai một sản phẩm cơ sở dữ liệu.

Cài đặt SQL Server

Việc cài đặt và chạy chương trình có thể mất khá nhiều thời gian, do vậy mà chúng tôi không muốn tốn nhiều thời gian của bạn vào công việc này. Với mục đích tập trung vào việc sử dụng một sản phẩm chuyên nghiệp, chính vì vậy bài viết này chúng tôi đã chọn sử dụng SQL Server 2005 Express Edition. Bạn có thể sử dụng phiên bản 2008 nếu thích – các ví dụ trong bài viết này sẽ làm việc trên cả nền tảng 2008.

Chúng ta hãy bắt đầu bằng cách download và cài đặt ba hạng mục dưới đây từ website của Microsoft:

Khi cài đặt SQL Server 2005 Express Edition, hãy sử dụng các thiết lập mặc định; các thiết lập này sẽ tự động taọ một instance cho database engine.

Đối với SQL Server Management Studio Express, không yêu cầu cấu hình đặc biệt nào – chỉ cần bạn chấp nhận các cấu hình mặc định. Khi sản phẩm được cài đặt, nó sẽ tự động phát hiện instance đã được tạo bởi SQL Server 2005 Express Edition.

Các ví dụ code sẽ được xây dựng và được test bằng Visual C# 2008 Express Edition.

Tất cả các công đoạn trên thoạt nghe có vẻ phức tạp, tuy nhiên thực tế lại không phải như vậy. Chúng ta hãy cài đặt các công cụ mới trên và chạy chúng.

Khởi chạy SQL Server Management Studio Express

Sản phẩm SQL Server Management Studio Express cho phép bạn quản lý các instance của SQL Server. Nghĩa là bạn có thể tương tác với cơ sở dữ liệu được cấu hình trên SQL Server instance đã cho. Hãy chạy SQL Server Management Studio Express từ menu Start của Windows. Biểu tượng chương trình thực cho SQL Server Management Studio Express được cài đặt như một mục menu con trong nhóm các chương trình của Microsoft SQL Server 2005: Start > All Programs > Microsoft SQL Server 2005.

Khi khởi chạy ứng dụng SQL Server Management Studio Express, một kết nối sẽ được tạo tự động cho instance của SQL Server đã cài đặt, xem thể hiện trong hình 1. Tên máy chủ trong hình 1 lấy từ tên của máy host (trong trường hợp này, LAPTOP1) và instance của SQL Server (SQLEXPRESS trong ví dụ này).


Hình 1: Kết nối đến một instance của SQL Server

Khi kết thúc, kích nút Connect trong hộp thoại. Sau một phút, màn hình SQL Server Management Studio Express chính sẽ xuất hiện (xem trong hình 2).


Hình 2: Kết nối thành công đến SQL Server instance

Vậy ứng dụng SQL Server Management Studio Express chính xác là gì? Trong hình 2, hãy để ý mục Object Explorer được hiển thị ở phía trên trong phần panel bên trái – chương trình này giống như kiểu ứng dụng thám hiểm (explorer) để cho phép bạn quan sát các instance của database engine. Cũng như trong Windows, bạn có thể xem một số lượng đáng kể các thông tin có liên quan đến tất cả các instance của cơ sở dữ liệu ở đây. Sau đây chúng ta hãy tìm hiểu một chút về cửa sổ Object Explorer.

Trong phần panel bên trái, kích vào dấu cộng phía bên trái của biểu tượng thư mục Databases. Hành động hãy sẽ hiển thị tất cả các cơ sở dữ liệu được host bằng instance của SQL Server đã cho (xem trong hình 3).


Hình 3: Cơ sở dữ liệu cư trú trên SQLEXPRESS.

Thứ đầu tiên cần lưu ý về các cơ sở dữ liệu trong hình 3 là tất cả chúng đều liên quan đến SQLEXPRESS; hay nói cách khác, không có cơ sở dữ liệu ứng dụng. Chúng ta hãy cứu chữa tình huống này bằng cách cài đặt một cơ sở dữ liệu mới.

Microsoft có cung cấp nhiều cơ sở dữ liệu mẫu cho việc sử dụng các sản phẩm SQL Server. Một trong số đó mà chúng tôi sử dụng cho ví dụ này có tên pubs. Bạn có thể download cơ sở dữ liệu pubs tại đây và cài đặt nó để sử dụng cho các trải nghiệm của riêng mình, hay có thể sử dụng cơ sở dữ liệu của riêng bạn.

Khi chạy file cài đặt sẽ triển khai cơ sở dữ liệu pubs, tuy nhiên bạn phải đính kèm nó trong SQL Server Management Studio Express. Bước này nghe có vẻ khó khăn, tuy nhiên việc đính kèm này thực sự rất dễ dàng. Bạn chỉ cần kích nút File và duyệt đến file instpubs.sql (xem trong hình 4). File của chúng tôi được định vị theo đường dẫn dưới đây:

C:\SQL Server 2000 Sample Databases\instpubs.sql

Chọn file và kích Open. Khi file kịch bản được mở, kích nút Execute trong toolbar (xem trong hình 5).


Hình 4: Chạy kịch bản cơ sở dữ liệu pubs


Hình 5: Trước khi file instpubs.sql được thực thi

Nếu tất cả đều diễn ra tốt đẹp với cài đặt của bạn, một cơ sở dữ liệu mới có tên gọi pubs sẽ xuất hiện trong danh sách bên trái panel, xem thể hiện trong hình 6.

Lưu ý: Để xem đầu ra trong hình 6, bạn có thể kích vào database instance (LAPTOP1\SQLEXPRESS) trong phần panel bên trái của cửa sổ Object Explorer, sau đó kích nút Refresh.


Hình 6: Sau khi đính kèm vào cơ sở dữ liệu pubs

Nếu mở rộng cơ sở dữ liệu pubs bằng cách kích vào dấu cộng, bạn sẽ thấy các bảng thành phần, xem thể hiện trong hình 7.


Hình 7: Sau khi cài đặt thành công cơ sở dữ liệu pubs

Cơ sở dữ liệu trong ví dụ này đã hoàn toàn sẵn sàng cho việc truy cập thông qua C#. Đó là tất cả những gì chúng tôi sẽ thực hiện với SQL Server Management Studio Express trong bài viết này. Như những hình thể hiện, sản phẩm này cung cấp một môi trường khá đẹp để bạn có thể quản trị các cơ sở dữ liệu SQL Server của mình. Giờ đây chúng ta sẽ đi xem cách truy cập vào các cơ sở dữ liệu đó bằng Visual C# 2008 Express Edition như thế nào.

Chạy Visual C# 2008 Express Edition

Bạn có thể chạy Visual C# 2008 Express Edition từ menu Start của Windows. Khi IDE mở, chọn Tools > Connect to Database từ menu. Thao tác này của bạn sẽ mở ra hộp thoại như thể hiện trong hình 8.

Lưu ý: Lần đầu tiên khi chạy lệnh này, hộp thoại sẽ được gọi là Choose Data Source. Khi bạn đã kết nối với nguồn dữ liệu, hộp thoại sẽ trở thành Change Data Source, xem thể hiện trong hình 8.


Hình 8: Kết nối đến nguồn dữ liệu

Chọn nguồn dữ liệu, nếu cần, kích OK. Trong hộp thoại tiếp theo (Add Connection), nhập vào đường dẫn đến file pubs.mdf. Trên hệ thống chúng tôi, đường dẫn mặc định như thể hiện bên dưới:

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data

Chọn file, kích Open, sau đó kích OK. Nguồn dữ liệu pubs sẽ xuất hiện, xem thể hiện trong hinh 9.


Hình 9: Truy cập thành công vào cơ sở dữ liệu từ bên trong Visual C# 2008 Express Edition

Lúc này bạn có thể tương tác với cơ sở dữ liệu pubs giống như những gì bạn có thể thực hiện với SQL Server Management Studio Express.

Tiếp đến, chúng ta sẽ truy cập vào cơ sở dữ liệu bằng mã C#.

Truy cập cơ sở dữ liệu với code C#

Trước khi chạy mã C#, bạn phải hủy kết nối với cơ sở dữ liệu pubs. Để thực hiện điều này trong Visual C# 2008 Express Edition, kích chuột phải vào cơ sở dữ liệu pubs và chọn Detach Database. Nếu không thực hiện thao tác này, khi chạy mã C# bạn có thể nhận thông báo lỗi như thể hiện trong hình 10.


Hình 10: Một vấn đề chung – quá nhiều kết nối

Giờ đây chúng ta đã remove tất cả các kết nối với cơ sở dữ liệu pubs, hãy chạy mã C# mà bạn đã download được để nhận kết quả đầu ra như thể hiện trong hình 11.


Hình 11: Truy hồi dữ liệu thành công

Hình 11 thể hiện mã truy cập cơ sở dữ liệu trọn vẹn của nó. Trông có vẻ như rất phức tạp nhưng thực sự không phải như vậy. Trong một nutshell, một số tham số được đọc từ một file có tên App.config sau đó một kết nối sẽ được thực hiện đến cơ sở dữ liệu. Dữ liệu yêu cầu sẽ được truy lại từ cơ sở dữ liệu và được hiển thị một hàng.

Đoạn mã 1 - Code truy cập cơ sở dữ liệu

// Get metadata from App.config file
string dbProvider =
  ConfigurationManager.AppSettings["dbProvider"];
string connectionString =
  ConfigurationManager.ConnectionStrings["SqlConnStringPubs"].
ConnectionString;
// Create a factory provider
DbProviderFactory dbProviderFactory =
DbProviderFactories.GetFactory(dbProvider);
 
// Create a connection object
DbConnection dbConnection = dbProviderFactory.CreateConnection();
Console.WriteLine("Connection object: {0}",
dbConnection.GetType().FullName);
 
dbConnection.ConnectionString = connectionString;
dbConnection.Open();
Console.WriteLine("Connection string: {0}", dbConnection.ToString());
 
// Create a command object.
DbCommand cmd = dbProviderFactory.CreateCommand();
Console.WriteLine("Command object: {0}", cmd.GetType().FullName);
cmd.Connection = dbConnection;
cmd.CommandText = "Select * From Authors";
 
// Create a data reader.
DbDataReader dbDataReader =
  cmd.ExecuteReader(CommandBehavior.CloseConnection);
Console.WriteLine("Data reader object: {0}",
dbDataReader.GetType().FullName);
 
Console.WriteLine("Command " + cmd.CommandText);
 
while (dbDataReader.Read())
    Console.WriteLine("Row data: {0}, {1}",
dbDataReader["au_lname"], dbDataReader["au_fname"]);
dbDataReader.Close();

Lưu ý rằng ở cuối đoạn mã 1, đoạn mã đã tạo các tham chiếu đến các cột cơ sở dữ liệu["au_lname"] và ["au_fname"]. Để hiểu được lý do tại sao lại có điều đó, bạn hãy quan sát các cột trong bảng authors được liệt kê bên trái panel của hình 12. Mã C# đang hiển thị là một tập nhỏ dữ liệu từ bảng này.


Hình 12: Các cột trong bảng authors

Đoạn mã 2 thể hiện nội dung của file cấu hình App.config.

Đoạn mã 2 - File metadata ngoài

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="dbProvider" value="System.Data.SqlClient" />
    </appSettings>
    <connectionStrings>
        <add name ="SqlConnStringPubs"
         connectionString ="Server=.\SQLExpress;
AttachDbFilename=C:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\Data\pubs.mdf;Database=dname;
Trusted_Connection=Yes;"/>
    </connectionStrings>
</configuration>

Các thiết lập trong đoạn mã 2 thể hiện các chi tiết nhà cung cấp cơ sở dữ liệu và thông tin kết nối được yêu cầu để truy cập SQLEXPRESS instance. Lưu ý các phần có từ add. Các mục dữ liệu này được tham chiếu trực tiếp trong mã C# trong quá trình chạy, xem lại trong đoạn mã 1.
Đến đây quá trình chúng ta đã hoàn tất một tua về ADO.NET.

Kết luận

Microsoft cung cấp khá nhiều công cụ phong phú cho việc phát triển cơ sở dữ liệu trung tâm trên nền tảng .NET. SQL Server 2005 Express Edition được thiết kế cho việc quản lý các database instance ở mức khá cao. Còn nếu muốn can thiệp vào các công việc bên trong của một cơ sở dữ liệu nào đó, bạn có thể sử dụng ứng dụng SQL Server Management Studio Express và Visual C# 2008 Express Edition IDE với các tính năng bổ sung. Bằng cách sử dụng sự kết hợp các công cụ này, bạn có thể quản trị và phát triển một cách hiệu quả các giải pháp cơ sở dữ liệu C# tập trung.

Với các công cụ cơ sở dữ liệu hữu dụng này, cơ sở dữ liệu mẫu có thể được download một cách dễ dàng. Bạn có thể sử dụng các cơ sở dữ liệu này để phát triển cơ sở dữ liệu của mình một cách nhanh chóng. Bên cạnh đó, sử dụng mã C# để truy cập một cơ sở dữ liệu ADO.NET khá đơn giản. Chỉ cần một file C# và một file cấu hình, còn lại nhiều mã ẩn bên dưới background rất phức tạp mà bạn không cần biết đến. Chính sự trừu tượng của các chi tiết kỹ thuật về kết nối cơ sở dữ liệu là những gì làm cho ADO.NET mạnh đến vậy.

Trong bài viết này, chúng tôi đã tập trung hầu hết vào việc thiết lập các công cụ này cho đúng cách. Mã truy cập cơ sở dữ liệu cài đặt rất đơn giản; mọi thứ chỉ phức tạp hơn khi bạn muốn thay đổi cơ sở dữ liệu. Tuy nhiên sự đơn giản hóa của ADO.NET sẽ giúp đỡ bạn rất nhiều trong lĩnh vực này.

Stephen B. Morris

Thứ Năm, 06/08/2009 14:09
4,34 👨 24.835
0 Bình luận
Sắp xếp theo
    ❖ Cơ sở dữ liệu