Trang chủĐăng kýĐăng nhập Cộng đồng tin học
Thứ 7, 2024-12-21, 8:19 PM
Khung đăng nhập

Khung tán gẫu
Xóm 'bà Tám'

http://congdongtinhoc.net
CHUYÊN TRANG GAME ONLINE GIẢI TRÍ//lehung-system.ucoz.net/stuff/

Thống kê diễn đàn
Bài viết mới nhất Trang chủ cập nhật Top 10 thành viên tích cực 10 Thành viên mới nhất
  • Quạt Hướng Trục
  • vào ucoz.com thiết kế web không hiểu sao...
  • Sothink DHTMLMenu 9.2 Build 90326
  • cho em quảng cáo cái
  • BIDV triển khai gói 10.000 tỷ đồng cho v...
  • Phượng Đã Nở Ngoài Hiên
  • Ngựa Ô Thương Nhớ
  • Những mẩu chuyện vui
  • 1001 cách biến "sim rác" thành...
  • Windows XP Media Center Edition 2008 - S...
  • Hướng dẫn chỉnh sửa dữ liệu trong form m...
  • 15 điều người dùng máy tính nên biết
  • Choáng vì "sâu" mới phát tán qua email
  • Giấu bớt những thành phần Control Panel ...
  • Thảo luận về IFrame Injection Attacks
  • Miễn phí bản quyền Ashampoo Anti-Malware...
  • Trải nghiệm với Camtasia Studio 7
  • 10 kỹ năng IT ‘hot’ của năm 2011
  • Intel công bố bộ vi xử lý Hệ thống trên ...
  • Kho phần mềm dành cho Android
  • Hung@info
  • thangbom
  • Hung@webmater
  • hebeo
  • giodaingan
  • david15
  • whitecat
  • luutruthongtin
  • systemfan_12
  • sha66b5cates0428
  • amir2x4
  • taiwindows075
  • kholuutru
  • shahmeerolivedigital9
  • ysg06363100
  • hetoxe6474
  • rootanalysisusa
  • memory_gift
  • systemfan_12
  • quatcongnghiep_saigon


  • [ Tổng hợp bài mới · Tổng số thành viên · Nội qui chung · Tìm kiếm bài viết · RSS ]
    • Page 1 of 1
    • 1
    Mã Nguồn C#, ADO.NET Kết Nối CSDL MS-SQL
    Hung@infoDate: Thứ 6, 2009-09-25, 1:42 PM | Bài viết # 1
    Trung úy
    Nhóm: Quản trị viên
    Bài viết: 994
    Uy tín: 10
    Hiện tại: Offline
    Mã Nguồn C#, ADO.NET Kết Nối CSDL MS-SQL

    Hôm nay tôi viết bài này, mong rằng sẽ giúp được các bạn sinh viên. Trước khi vào những phần kế tiếp, tôi cũng xin các bạn nhớ cho một điều, là các bạn phải nên tự học. Và người thầy hay nhất vấn là những quyển sách, những bài viết hay về bộ môn mà các bạn đang muốn học. Do đó, các bạn nên đọc và hiểu tất cả những gì tôi viết trong những phần kế tiếp. Phần nào không hiểu, xin cứ nêu ra những thắc mắc, tôi sẽ cố gắng giải đáp đầy đủ. Như thế, chúng ta mới có thể cùng học. Các bạn học để hiểu những gì tôi viết. Và tôi học để biết viết làm sao cho các bạn dễ hiểu. Lời cuối tôi muốn nói là các bạn không nên thấy có sẵn mã nguồn, rồi cứ sao y bản chánh, cóp-py qua phần mềm của các bạn mà không chịu đọc những phần giải thích. Như vậy không phải là tự học, mà là tự hại mình.

    Bài viết này sẽ là một bài viết khá dài. Vì tôi sẽ giải thích thêm về những điều có liên quan tới những hàng mã nguồn mà bài viết dùng tới.

    I. Những điều cần nên biết trước.

    a. Khái niệm căn bản về object oriented language: hàm mở, hàm hủy (constructor, destructor), thừa kế (inheritance), biến từ và các dạng của biến từ (public , static, private, protected, global, const).
    b. Căn bản về quy luật của C# (syntax)
    c. Khái niệm căn bản về ADO.NET
    d. Biết dùng VS-2008 để tạo một Win-Form project
    e. Biết dùng VS-2008 để tạo một class library project.
    f. Biết dùng sơ qua về SQL Express 2005/2008 hoặc một phiên bản SQL2005/2008 khác.

    II. Cấu Trình CSDL

    Chúng ta hãy bước ngay vào vấn đề chính, là phải tạo lên một cấu trình cho CSDL. Như các bạn đã học qua, chúng ta nên phân chia một phần mềm ra làm 3 cấu trình chính: Giao diện (Presentation layer), Quy luật doanh nghiệp (Business Logic Layer), và CSDL (Data Access Layer).

    a. Tạo một solution với hai cấu trình GiaoDien và CSDL.

    Việc đầu tiên là dùng VS-2008 để tạo lên một solution mới và một cấu trình thuộc dạng Windows Form Application như họa đồ sau:

    Để thống nhất, các bạn hãy cho cấu trình (project) Windows Forms một cái tên là Giaodien. Nhớ tạo thư viện cho solution, và cho solution cái tên là MyApp, sau đó, bấm vào OK để tạo solution và cấu trình. Khi VS tạo solution và cấu trình xong, các bạn sẽ thấy Solution Explorer hiển thị với solution MyApp, và cấu trình Giaodien, như sau:

    Trong cấu trình Giaodien, có một form chính, đó là form1. Thông thường, tôi đổi tên của Form1 thành MainForm. Nhưng trong bài viết này, để khỏi phải sửa đổi lôi thôi, hãy giữ cái tên Form1 của nó. Chỉ cần các bạn nhớ, Form1 là khung chính của cấu trình.

    Trước khi viết mã nguồn cho Form1, các bạn hãy tạo lên bộ thư viện DLL cho CSDL. Bấm nút bên phải của con chuột vào MyApp Solution, và bấm Add/New Project, để tạo lên một cấu trình thư viện DLL với cái tên là CSDL, như sau:

    Thư viện này, dĩ nhiên thuộc dạng Class Library. Các bạn hãy cho nó cái tên là CSDL như hình trên, sau đó bấm con chuột vào OK để tạo lên thư viện CSDL. Khi VS tạo thư viện CSDL xong, Solution Explorer của bạn sẽ hiển thị như sau:

    Việc kế tiếp là tạo một lớp mới cho CSDL và cho nó cái tên là DbAccess. DbAccess sẽ là lớp chính mà cấu trình Giaodien sẽ dùng để kết nối với CSDL. DbAccess cũng sẽ là lớp chứa đựng mã nguồn có những hàm để truy vấn cũng như cập nhật dữ liệu. Các bạn hãy bấm nút phải của con chuột vào CSDL, sau đó chọn Add/New Item, để tạo lên lớp DbAccess, như sau:

    Sau khi bấm vào nút "Add", như hình trên, các bạn sẽ có một lớp mới trong CSDL. Đến đây, các bạn có thể xóa lớp Class1 của CSDL đi, vì chúng ta sẽ không dùng đến lớp Class1. Muốn xóa lớp Class1 đi, các bạn có thể bấm nút bên phải của con chuột vào Class1, sau đó chọn Delete.

    Chúng ta sẽ bắt đầu viết mã nguồn cho lớp DbAccess trong phần tới.

    III. Mã Nguồn cho DbAccess

    Mở mã nguồn của DbAccess.cs ra, các bạn thấy những hàng mã nguồn sau đây, mà VS đã tạo lên theo lớp mẫu (template):

    Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace CSDL
    {
         class DbAccess
         {
         }
    }

    Trong những hàng mã nguồn trên, hàng class DbAccess cần phải thay đổi lại, như sau:

    Public class DbAccess

    Bởi vì giá trị mặc định cho class DbAccess, sẽ là private. Dĩ nhiên, nếu private, thì GiaoDien sẽ không xử dụng được. Sau đó, bạn hãy viết mã nguồn cho DbAccess, như sau:

    Code
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;

    namespace CSDL
    {
         public class DbAccess
         {
             private static SqlConnection sqlConnectionPool = new SqlConnection();

             public DbAccess()
             {
                  
             }

             /// <summary>
             /// Tạo connection pool.  Only one connection pool is allowed per process.
             /// </summary>
             /// <param name="connectionString"></param>
             public void CreateConnectionPool(string connectionString)
             {
                 if (sqlConnectionPool.State == ConnectionState.Closed)
                 {
                     sqlConnectionPool.ConnectionString = connectionString;
                     sqlConnectionPool.Open();
                      
                 }
                 else
                 {
                     throw new Exception("Programming error.  Request to set connection pool while it is opening.");
                 }
                  
             }

             /// <summary>
             /// Đóng connection pool
             /// </summary>
             public void CloseConnectionPool()
             {
                 if (sqlConnectionPool.State != ConnectionState.Closed)
                 {
                     sqlConnectionPool.Close();
                 }
             }

             /// <summary>
             /// Tạo connection string cho đăng nhập dạng Windows
             /// </summary>
             /// <param name="serverName"></param>
             /// <param name="databaseName"></param>
             /// <returns></returns>
             public static string MakeConnectionString(string serverName, string databaseName)
             {
                 return string.Format("Server={0};Initial Catalog={1};Trusted_Connection=Yes", serverName, databaseName);
             }

             /// <summary>
             /// Tạo connection string cho đăng nhập dạng SQL
             /// </summary>
             /// <param name="serverName"></param>
             /// <param name="databaseName"></param>
             /// <param name="loginName"></param>
             /// <param name="loginPwd"></param>
             /// <returns></returns>
             public static string MakeConnectionString(string serverName, string databaseName,string loginName,string loginPwd)
             {
                 return string.Format("Server={0};Initial Catalog={1};User ID={2};Password={3}", serverName, databaseName, loginName , loginPwd);
             }
         }
    }

    Đến đây, bạn đã có một lớp DbAccess ADO.NET có thể kết nối với một CSDL. Đặc biệt hơn, lớp DbAccess này của các bạn sẽ dùng connection pool để tạo dựng những kết nối có tốc độ xử lý mau chóng. Tôi sẽ nói thêm về connection pool trong phần dưới.

    Tiếp theo, các bạn cần phải tạo lên một giao diện có thể lấy những dữ liệu cần thiết cho việc kết nối với CSDL. Cấu trình GiaoDien hiện có Form1. Các bạn sẽ dùng Form1 để lấy dữ liệu từ người xử dụng. Giao diện cho Form1 nên được thiết kế, như sau:

    Như hình trên, Form1 có một giao diện với 2 combobox, 2 radiobutton, 2 textbox, và hai nút bấm (button). Các bạn hãy các controls trên những tên như sau, theo thứ tự từ trên xuống dưới, từ trái qua phải:

    cbxServer
    cbxDatabase
    rbWindowAuthentication (vớí thuộc tính checked=true)
    rbSqlAuthentication
    txtLoginName
    txtPassword
    btnCancel
    btnLogin

    Sau khi đã tạo lên một giao diện như trên, các bạn hãy nhắp con chuột hai lần liên tiếp vào từng control một để VS tự động tạo lên những mã nguồn cho hàm. Và sau đó, nếu mở mã nguồn của Form1 ra, các bạn sẽ có những hàng mã nguồn như sau:

    Code
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Giaodien
    {
         public partial class Form1 : Form
         {
             public Form1()
             {
                 InitializeComponent();
             }

             private void cbxServer_SelectedIndexChanged(object sender, EventArgs e)
             {

             }

             private void cbxDatabase_SelectedIndexChanged(object sender, EventArgs e)
             {

             }

             private void rbWindowsAuthentication_CheckedChanged(object sender, EventArgs e)
             {

             }

             private void rbSQLAuthentication_CheckedChanged(object sender, EventArgs e)
             {

             }

             private void tbxLoginName_TextChanged(object sender, EventArgs e)
             {

             }

             private void tbxPassword_TextChanged(object sender, EventArgs e)
             {

             }

             private void btnCancel_Click(object sender, EventArgs e)
             {

             }

             private void btnLogin_Click(object sender, EventArgs e)
             {

             }
         }
    }

    Hãy nhanh chóng viết mã nguồn cho hàm btnLogin_Click, vì có lẽ, các bạn muốn thấy ngay kết quả của việc kết nối CSDL. Nhưng trước khi viết mã nguồn cho Form1, các bạn cần phải làm hai điều:

    a. Liên kết cấu trình CSDL qua Giaodien (tạo reference)
    b. Cho CSDL vào Form1.

    Trước hết, các bạn cần phải bấm nút phải của con chuột vào cấu trình Giaodien, sau đó chọn "Add Reference..." Khi khung Add Reference hiển thị, bấm con chuột vào tab "Project", sau đó chọn CSDL.

    Kế tiếp, cho hàng mã nguồn sau đây vào Form1.cs

    using CSDL;

    Khi hai việc trên đã hoàn thành mỹ mãn, các bạn hãy viết những giòng mã nguồn sau đây cho hàm btnLogin_Click():

    Code
    private void btnLogin_Click(object sender, EventArgs e)
             {
                 string connectionString;

                 try
                 {
                     if (this.rbWindowsAuthentication.Checked)
                     {
                         connectionString = DbAccess.MakeConnectionString(cbxServer.Text, cbxDatabase.Text);
                     }
                     else
                     {
                         connectionString = DbAccess.MakeConnectionString(cbxServer.Text, cbxDatabase.Text, tbxLoginName.Text, tbxPassword.Text);
                     }

                     this.dbAccess.CreateConnectionPool(connectionString,"Giao Diện Kết Nối");
                            MessageBox.Show("Đã kết nối với CSDL...","Giao Diện Kết Nối");
                 }
                 catch (Exception exp)
                 {
                     MessageBox.Show(exp.Message);
                 }

             }

    Hãy thử kiểm tra lại những giòng mã C# trên. Khi người xử dụng bấm vào nút Login từ khung Form1, hàm btnLogin_Click() sẽ được gọi. Và trong hàm này, chúng ta đã làm những điều giản dị như sau:

    ○ Tạo một connection string cho đăng nhập dạng Windows, hoặc dạng SQL tùy theo giá trị của nút bấm rbWindowsAuthentication.
    ○ Gọi hàm CreateConnectionPool() mà chúng ta đã viết cho lớp DbAccess để tạo lên một connection chính, và sau đó kết nối với CSDL.
    ○ Nếu kết nối có kết quả tốt đẹp, thì chúng ta sẽ hiển thị khung Giao Diện Kết Nối dưới đây:

    Bây giờ, các bạn hãy thử compile và chạy Giaodien. Khi khung Form1 được hiển thị, hãy điền giá trị thích ứng cho server, database, sau đó bấm nút Login. Nếu các bạn cho những giá trị thích ứng có thể dùng để kết nối, các bạn sẽ thấy khung "Đã kết nối với CSDL" như hình trên. Ngược lại, nếu không thể kết nối được, các bạn sẽ thấy một khung lỗi.

    Khi đã kết nối được rôi, các bạn hãy thử bấm Login thêm một lần nữa. Và nếu mã nguồn hoạt động như dự kiến, thì khung Giao Diện Kết Nối dưới đây sẽ hiển thị:

    Sở dĩ chúng ta bị lỗi trên, do nút Login đã được bấm 2 lần. Mỗi lần nút Login được bấm, thì mã nguồn của chúng ta lại gọi hàm CreateConnectionPool để tạo lên một connection pool, nhưng connection pool chỉ nên tạo một lần mà thôi. Khi connection pool đã được tạo lên, và CSDL đã được kết nối, thì Form1 phải đóng lại và cấu trình Giaodien phải hiển thị một khung khác.

    Nhưng bài viết này đến đây thì chấm hết, vì CSDL đã được kết nối. Bài kế tiếp, tôi sẽ viết thêm về connection pool, và cách dùng DbAccess trong cấu trình CSDL để truy vấn cũng như cập nhật dữ liệu.


    --== Cộng đồng tin học ==--
     
    • Page 1 of 1
    • 1
    Search:


      Copyright Cộng đồng tin học © 2024