• Thứ Hai, 19/06/2006 09:38 (GMT+7)

    Vấn đề nhiều truy cập một record trong VB.NET và CSDL SQL 2000

    Câu hỏi :
    Tôi đang thực hiện chương trình quản lý sinh viên bằng VB.Net và hệ quản trị CSDL SQL Server 2000. CSDL được đặt trên một máy riêng và chương trình quản lý được cài đặt và chạy trên một hay nhiều máy khác. Xin hướng dẫn cách đăng nhập CSDL và giải quyết xung đột khi có nhiều người cùng đọc hoặc cùng ghi vào một dữ liệu.


    Trả lời :
    Để viết đoạn lệnh VB.Net truy xuất CSDL có tính tổng quát hóa cao, nghĩa là đoạn lệnh này sẽ chạy trên bất kỳ CSDL nào của bất kỳ hệ quản trị CSDL nào, bạn nên dùng các đối tượng ADO .Net và truy xuất CSDL thông qua DSN kết hợp với CSDL đó. Nếu bạn chỉ muốn truy xuất các CSDL của SQL Server, bạn có thể dùng các đối tượng ADO .Net như SqlConnection, SqlDataAdapter, SqlCommand, DataSet. Để hiển thị và cập nhật nội dung trong CSDL dễ dàng, tin cậy, bạn có thể dùng đối tượng DataGrid. Để demo việc truy xuất CSDL dùng các đối tượng ADO .Net, bạn hãy chạy Visual Studio .Net, tạo mới 1 project VB .Net rồi hiệu chỉnh hàm InitializeComponent. Sau đây là đoạn code VB .Net demo việc truy xuất CSDL trên 1 SQL Server nào đó mà bạn có account và biết địa chỉ của nó:

    'khai báo các thư viện đối tượng cần dùng
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Windows.Forms
    'code định nghĩa Form của ứng dụng
    Public Class Form1
       Inherits System.Windows.Forms.Form
       'định nghĩa các biến đối tượng cần trong truy xuất database
       Friend WithEvents SqlConnection1 As SqlConnection
       Friend WithEvents SqlDataAdapter1 As SqlDataAdapter
       Friend WithEvents DataSet1 As DataSet
       Friend WithEvents DataGrid1 As DataGrid
       Friend WithEvents SqlSelectCommand1 As SqlCommand
       'định nghĩa hàm khởi động Form
       <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
          'tạo đối tượng SqlConnection và thiết lập thông số
          SqlConnection1 = New SqlConnection
          'tên SQL Server và acount có thể do người dùng nhập vào
          SqlConnection1.ConnectionString = 'data source=SqlServerName;user id=sa;packet size=4096;persist security info=False;initial catalog=Northwind'
          'tạo đối tượng SqlSelectCommand và thiết lập thông số
          SqlSelectCommand1 = New SqlCommand
          SqlSelectCommand1.CommandText = 'SELECT * FROM Products where SupplierID=2'
          SqlSelectCommand1.Connection = SqlConnection1
          'tạo đối tượng SqlDataAdapter và thiết lập thông số
          SqlDataAdapter1 = New SqlDataAdapter
          SqlDataAdapter1.SelectCommand = SqlSelectCommand1
          'tạo đối tượng DataSet và thiết lập thông số
          DataSet1 = New DataSet
          SqlDataAdapter1.Fill(DataSet1)
          'tạo đối tượng DataGrid và thiết lập thông số
          DataGrid1 = New DataGrid
          DataGrid1.DataMember = ''
          DataGrid1.DataSource = DataSet1
          DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
          DataGrid1.Location = New System.Drawing.Point(8, 8)
          DataGrid1.Name = 'DataGrid1'
          DataGrid1.Size = New System.Drawing.Size(576, 296)
          DataGrid1.TabIndex = 0
          'thiết lập thông số cho Form1
          Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
          Me.ClientSize = New System.Drawing.Size(552, 317)
          Me.Controls.Add(Me.DataGrid1)
          Me.Name = 'Form1'
          Me.Text = 'Form1'
        End Sub
       ...
    Để kiểm soát việc truy xuất đồng thời CSDL từ các ứng dụng khác nhau chạy trên các máy client khác nhau, bạn có thể dùng giải pháp giao tác (transaction) được Microsoft tích hợp trong framework .Net. Giao tác là 1 đoạn lệnh xử lý nào đó với tính chất thi hành đặc biệt: hoặc không lệnh nào trong đoạn lệnh đó được thi hành, hoặc tất cả các lệnh trong đoạn lệnh đó được thi hành và không ứng dụng nào khác có thể thấy trạng thái tạm thời trong lúc các lệnh trong giao tác đang được thực hiện. Với đặc tính của giao tác, bạn chỉ cần khai báo 1 giao tác chứa đoạn lệnh truy xuất CSDL của mình để đảm bảo nó sẽ không tranh chấp với bất kỳ chương trình nào khác. Đoạn lệnh VB .Net demo việc sử dụng giao tác:

    'khai báo biến giao tác
    Dim myTrans As SqlTransaction
      'Bắt đầu 1 giao tác cục bộ
      myTrans = SqlConnection1.BeginTransaction()
      'đoạn lệnh truy xuất database được quản lý bởi SqlConnection1
      ...
      'kết thúc giao tác
      myTrans.Commit()

    Để hiểu rõ ràng và chi tiết hơn về giao tác, bạn nên đọc thêm các trang web về giao tác trong CD MSDN của Microsoft.
    Chuyên mục: Lập trình