Tìm hiểu về ngôn ngữ Visual basic.net

Yêu cầu chức năng: Sau khi được phía nhà cung cấp chấp nhận yêu cầu của đơn mua phim thì lưu đơn mua phim vào hệ thống. Phim mới nhập về sẽ được chuyển qua cho bộ phận nhận phim mới. o Yêu cầu người sử dụng: Chương trình được xử lý trên máy vi tính nối mạng. Nhân viên xử lý đơn mua phim phải có khả năng sử dụng máy nhất định, phải qua huấn luyện để sử dụng phần mềm hệ thống truy xuất dữ liệu nhanh chóng, tạo lập các hoá đơn và cập nhật dữ liệu mới kịp thời đảm bảo cho hệ thống không bị gián đoạn. a. Nhận phim mới: o Yêu cầu chức năng: Khi phim mới được nhập về nó được lưu và trong tập danh mục phim. Mỗi phim có một mã riêng để phân biệt với các phim khác. o Yêu cầu người sử dụng: Được trang bị một máy vi tính nối mạng cục bộ. Được phép chỉnh sữa ,cập nhật trên bảng danh mục phim. Trong danh mục phim các mã số phim không được trùng nhau. Màn hình giao diện đơn giản dễ sử dụng.

doc37 trang | Chia sẻ: baoanh98 | Lượt xem: 985 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tìm hiểu về ngôn ngữ Visual basic.net, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ví dụ như DataSet hoặc DataView. Việc sử dụng một kiến trúc không kết nối cung cấp nhiều lợi ích, lợi ích quan trọng nhất là nó cho phép các ứng dụng của bạn chạy nhanh hơn. Điều này có nghĩa là cơ sở dữ liệu của bạn sẽ thực hiện tốt việc hỗ trợ cho hàng trăm người sử dụng mà tương đương như việc hỗ trợ cho mười người sử dụng. Điều này có thể thực hiện được bởi vì ứng dụng chỉ kết nối đến cơ sở dữ liệu đủ lâu để nhận và cập nhật dữ liệu, bằng cách ấy việc giải phóng các kết nối cơ sơ dữ liệu có sẳn cho các instance khác của ứng dụng của bạn. Không gian tên System.Data và OLEDB: Trong .Net truy cập dữ liệu được thực hiện thông qua các lớp trong namespace System.Data. Namespace này được chi thành hai phần: tập các lớp thuộc System.Data.OleDB và tập các lớp thuộc System.Data.SQLClient. Tập các lớp đầu tiên, System.Data.OleDB được thiết kế để cho phép kết nối với bất kỳ hệ cơ sở dữ liệu nào nếu như có OLEDB provider hoặc một ODBC driver của nó, và tương đương với lớp ADO gốc về mặt kỹ thuật. Tập thứ hai, System.Data.SQLClient, được thiết kế chỉ làm việc với Microsoft SQL Server, nhưng cung cấp tính năng rộng rãi hơn chức năng của các lớp OLEDB. Kiến trúc tổng quát của các lớp truy xuất dữ liệu trong .Net được mô tả trong hình sau gồm hai hệ thống chính. System.data (chứa các đối tượng xử lý dữ liệu chung) System.data.SqlClient (chứa các đối tượng cụ thể kềt nối vào Microsoft SQL Server) System.data.OLEDB (chứa các đối tượng xử chỉ dùng để kết nối thông qua các OLEBD Provider) Giới thiệu về OleDbConnection: Lớp OleDbConnection là trái tim của các lớp. Nó cung cấp một kết nối từ nguồn dữ liệu của chúng ta, mà nguồn dữ liệu đó có thể là SQL Server. Constructor cho lớp này nhận thông số lựa chọn là connection string. Connection string: Connection string được tạo ra bởi nhiều thông số được biểu diễn ở hình sau. Constructor khởi tạo một instance mới của lớp với connection string xác định. Bạn cũng có thể gọi constructor mà không có connection string khởi tạo một instance mới của lớp. Sau đó, bạn sẽ cần phải đặt một vài thuộc tính của lớp OleDbConnection trước khi bạn có thể sử dụng kết nối. Vì thế, thật là thuận lợi để khởi tạo lớp này với một connection string, cũng như chúng ta sử dụng ít code hơn bởi vì không phải đặt một vài các thuộc tính của lớp sau khi chúng ta khởi tạo nó. Connection string mà bạn sử dụng phụ thuộc vào dữ liệu lưu trữ (data store) mà bạn truy cập. Tuy nhiên, có một vài thuộc tính cơ bản của một connection string ứng dụng đến hầu hết các dữ liệu lưu trữ. Bảng sau là danh sách các thuộc tính tiêu biểu để có thể đặt trong một connection string: Thông số Diễn giải Provider Xác định trình cung cấp OLEDB được sử dụng. Data Source Xác định tên máy nơi dữ liệu lưu trữ được lưu trữ. Initial catalog Xác định tên cơ sở dữ liệu được sử dụng. User ID Xác định userID của người sử dụng đăng nhập vào hệ thống. Password Xác định mật khẩu của người sử dụng đăng nhập. Integrate Security Xác định trình cung cấp sẽ gọi trình cung cấp bảo mật dành riêng trong hệ điều hành để nhận truy cập đến tên đăng nhập của chúng ta và sau đó sử dụng tên đăng nhập này cho phép data store phải có giá trị hợp lệ với sự truy cập của chúng ta. Một giá trị SSPI ( Security Support Provider Interface) thường xuyên được xác định với thông số này. Ví dụ: Dim objConnection As OleDbConnection = New _ OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial " & _ "Catalog=fafilm;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;" & _ "Workstation ID=DHKTCN;Use Encryption for Data=False;Tag with column collation wh" & _ "en possible=False") Mỗi khi chúng ta khởi tạo một đối tượng kết nối với một connection string như đã biểu diển ở trên, chúng ta có thể gọi bất kỳ các phương thức của đối tượng OleDbConnection như Open và Close, một cách thực sự mở và đóng một kết nối đến cơ sở dữ liệu được xác định trong connection string. Ví dụ: ‘ mở kết nối cơ sở dữ liệu objConnection.Open() ‘đóng kết nối cơ sở dữ liệu objConnection.Close() 4 . Giới thiệu OleDbDataAdapter: DataSet Một tập hợp các bảng, các quan hệ chứa dữ liệu đọc được từ dữ liệu lưu trữ. Lớp OleDbDataAdapter được sử dụng để đọc và ghi dữ liệu từ bất kỳ OLEDB data source và có thể được đặt để chứa các câu lệnh SQL hoặc các stored procedure được thực thi. Lớp OleDbDataAdapter thực sự không lưu trữ bất kỳ dữ liệu nào nhưng được sử dụng như cầu nối giữa lớp DataSet và dữ liệu lưu trữ. Hình sau sẽ cho ta nhìn thấy một cách ngắn gọn lớp DataSet: Data Store OleDbDataAdapter SelectCommand a.Thuộc Tính SelectCommand: Khi chúng ta muốn đọc dữ liệu từ dữ liệu lưu trữ, đầu tiên chúng ta phải đặt thuộc tính Select Command của lớp OleDbDataAdapter. Thuộc tính này được nhận từ OleDbCommand và được sử dụng để xác định dữ liệu gì được chọn và được chọn như thế nào. Khi chúng ta xác định thuộc tính SelectCommand chúng ta phải đặt các thuộc tính khác để đối tượng OleDbDataAdapter biết được nhận dữ liệu như thế nào. Sau đây là các thuộc tính chung của SelectCommand: Thuộc tính Diễn giải Connection Đặt đối tượng OleDbconnection được sử dụng để truy cập dữ liệu lưu trữ. CommandText Đặt câu lệnh SQL hoặc tên stored procedure được sử dụng để lựa chọn dữ liệu. CommandType Đặt một giá trị để xác định thuộc tính CommandText như thế nào được biên dịch. Ví dụ: Sử dụng SelectCommand để thực thi chuổi SQL Dim MyDataAdapter As New OleDbDataAdapter() MyDataAdapter.SelectCommand=new OleDbCommand() MyDataAdapter.SelectCommand.Connection=objConnection MyDataAdapter.SelectCommand.CommandText= _ “Select tenphim,maphim from phim” MyDataAdapter.SelectCommand.CommandType= _ CommandType.Text Ví dụ: Sử dụng SelectCommand để thực thi Stored Procedure Dim MyDataAdapter As New OleDbDataAdapter() MyDataAdapter.SelectCommand=new OleDbCommand() MyDataAdapter.SelectCommand.Connection=objConnection MyDataAdapter.SelectCommand.CommandText= _ Tên_storeprocedure MyDataAdapter.SelectCommand.CommandType= _ CommandType.Text b. Phương thức ExecuteNonQuery: Mỗi khi chúng ta đặt thuộc tính SelectCommand một cách chính xác, chúng ta cần phải thực thi câu lệnh SQL hoặc Stored Procedure xác định trong thuộc tính CommandText. Chúng ta làm điều này bằng cách gọi phương thức ExecuteNonQuery. Phương thức này thực thi chuỗi SQL hoặc Stored Procedure mà chúng ta xác định và trả về số các dòng bị tác động bởi câu lệnh SQL hoặc Stored Procedure. Đối với câu lệnh Select thì phương thức này luôn trả về giá trị là -1 ,đối với câu lệnh Insert, Update, Delete thì giá trị trả về là số dòng bị tác động bởi câu lệnh. Ví dụ: ObjDataAdapter.SelectCommand.ExecuteNonQuery() c. Phương thức Fill: Mỗi khi chúng ta thực thi phương thức ExecuteNonQuery, chúng ta có thể thực thi phương thức Fill để điền vào DataSet với dữ liệu mà đối tượng OleDbDataAdapter nhận được từ dữ liệu lưu trữ. Tuy nhiên trước khi chúng ta làm điều này chúng ta phải khởi tạo một đối tượng DataSet. Cú pháp: Fill ( DataSet , string ) Đối số DataSet xác định một đối tượng DataSet dùng để chứa dữ liệu được điền vào. Đối số string xác định tên của bảng mà được sử dụng để là bảng ánh xạ. Trong trường hợp OleDbDataAdapter trả về nhiều bảng, chúng ta phải xác định bảng gốc cho thông số này. Root table sẽ là bảng chính từ dữ liệu được chọn. Nói cách khác, điều này có nghĩa là bảng được xác định trong mệnh đề from của câu lệnh Select. Ví dụ: ObjDataAdapter.Fill (objDataSet, “Phim”) d. Phương thức Update: Phương thức Update của DataAdapter được gọi để giải quyết những thay đổi từ một DataSet gởi đến dữ liệu nguồn. Khi bạn gọi phương thức Update, DataAdapter phân tích những thay đổi được tạo ra và thực thi câu lệnh riêng (INSERT, UPDATE, hoặc DELETE). Khi DataAdapter gặp một thay đổi đến một DataRow, nó sử dụng InsertCommand, UpdateCommand, hoặc DeleteCommand để xử lý sự thay đổi. Điều này cho phép bạn tối đa hoá việc thực thi của ứng dụng ADO.NET của bạn bởi việc xác định command syntax tại thời điểm thiết kế. Bạn phải đặt các câu lệnh trước khi gọi phương thức Update. Nếu phương thức Update được gọi và command cần thực thi không tồn tại (ví dụ như không có câu lệnh DeleteCommand để xóa các dòng), thì một ngoại lệ sẽ bị ném ra. Các thông số có thể được sử dụng để xác định giá trị xuất và nhập cho câu lệnh SQL hoặc stored procedure cho mỗi dòng bị thay đổi trong một DataSet. Phương thức Update sẽ giải quyết những thay đổi của bạn và gởi trả về dữ liệu nguồn, tuy nhiên các client khác có thể được sửa đổi dữ liệu tại dữ liệu nguồn sau khi bạn đã điền vào DataSet. Để làm tươi DataSet của bạn với dữ liệu tức thời, bạn sử dụng lại phương thức Fill của DataAdapter để điền vào DataSet. Các dòng mới sẽ được thêm vào bảng và cập nhật thông tin sẽ được phản hồi vào trong các dòng tồn tại. Để xử lý các ngoại lệ có thể xuất hiện trong suốt quá trình sử dụng lệnh Update, bạn có thể sử dụng sự kiện RowUpdated để phản hồi đến các lỗi do cập nhật các dòng. Ví dụ sau minh họa cho việc thực thi các cập nhật đến các dòng được thay đổi bằng cách đặt thuộc tính UpdateCommand của DataAdapter. Dim catDA As SqlDataAdapter = New SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", nwindConn) catDA.UpdateCommand = New SqlCommand("UPDATE Categories SET CategoryName = @CategoryName " & _ "WHERE CategoryID = @CategoryID", nwindConn) catDA.UpdateCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName") Dim workParm As SqlParameter = catDA.UpdateCommand.Parameters.Add("@CategoryID", SqlDbType.Int) workParm.SourceColumn = "CategoryID" workParm.SourceVersion = DataRowVersion.Original Dim catDS As DataSet = New DataSet catDA.Fill(catDS, "Categories") Dim cRow As DataRow = catDS.Tables("Categories").Rows(0) cRow("CategoryName") = "New Category" catDA.Update(catDS) 5. Giới thiệu DataSet: Thành phần chính khác của ADO.NET đó là DataSet. Nó tương ứng với ADO recordset. Tuy nhiên, nó có hai điểm khác biệt quan trọng. Thứ nhất, DataSet luôn tách rời, và hậu quả là không quan tâm nơi xuất xứ của dữ liệu – có thể dùng DataSet theo cách để điều tác dữ liệu từ một nguồn dữ liệu truyền thống hoặc từ một tư liệu XML. Để nối một DataSet với một nguồn dữ liệu, ta cần dùng DataAdapter như một yếu tố trung gian giữa DataSet và trình cung cấp dữ liệu .NET .NET Data Provider Connection Command Data Source XML document DataReader DataSet DataAdapter Lớp DataSet được sử dụng để lưu trữ dữ liệu nhận được từ data store và lưu trữ các dữ liệu này trong bộ nhớ của Client. Đối tượng DataSet chứa một tập hợp các bảng, các quan hệ chúng chứa dữ liệu đọc được từ data store. Dữ liệu trong DataSet thực sự không kết nối từ dữ liệu lưu trữ và bạn có thể chạy trên dữ liệu một cách độc lập từ dữ liệu lưu trữ. Bạn có thể thao tác dữ liệu trên một đối tượng DataSet bằng cách thêm vào, sữa chữa, xoá các record. Bạn có thể ứng dụng những thay đổi trở lại dữ liệu lưu trữ bằng cách sử dụng đối tượng OleDbDataAdapter. Dữ liệu trong đối tượng DataSet được biểu diển như XML, thực hiện nó rất hiệu quả để chuyển qua lại giữa các đối tượng. Ví dụ : để điền một DataSet bằng dữ liệu từ bảng Phim trong cơ sở dữ liệu Fafilm objDataSet = New DataSet() objConnection.Open() objDataAdapter = New OleDbDataAdapter("SELECT maphim,tenphim,tennsx,namsx,matl,malp,sotap from phim", objConnection) objDataSet = New DataSet() objDataAdapter.Fill(objDataSet, "Phim") objConnection.Close() Giải thích: Sau khi mở tuyến kết nối như đã làm ở trên, ta có ba bước liên quan đến việc điền DataSet : Lập minh dụ một đối tượng DataAdapter mới. Trước khi điền DataSet, hiển nhiên ta cần phải chỉ định thông tin tuyến nối và dữ liệu muốn điền. Tạo DataSet mới. Gọi phương thức Fill của DataAdapter. Ta truyền DataSet muốn điền dưới dạng một tham số cho phương pháp này, cùng với tên của bảng bên trong DataSet muốn điền. Nếu ta gọi phương thức Fill dựa trên một tuyến nối đóng, tuyến nối sẽ tự động mở, rồi đóng lại sau khi DataSet đã được điền. 6. Giới thiệu DataView: Lớp DataView được sử dụng để sắp xếp, lọc, tìm kiếm, soạn thảo dữ liệu từ một DataSet. DataView là binbable , có nghĩa là nó có thể bound đến các điều khiển giống như cách DataSet có thể bound đến các control. Trong bộ nhớ dữ liệu được sử dụng bởi các đối tượng DataSet và DataView là đối tượng DataTable. Lớp DataView là một khung nhìn thu nhỏ của DataTable được nhận từ đối tượng DataSet. Bạn có thể tạo một DataView từ dữ liệu chứa trong một DataTable nó chỉ chứa dữ liệu mà bạn hiển thị. Ví dụ, nếu dữ liệu trong DataTable chứa tất cả các tác giả đã được sắp xếp bởi họ và tên, bạn có thể tạo một DataView để chứa tất cả các tác giả được sắp xếp bởi tên trước sau đó rồi tới họ. Hoặc bạn muốn tạo một DataView chỉ chứa tên hoặc họ. Dữ liệu trong một DataView là tách rời từ dữ liệu được chứa trong DataTable của DataSet, vì thế bạn có thể thực thi dữ liệu mà không ảnh hưởng gì đến dữ liệu trong DataSet. Constructor cho lớp DataView khởi tạo một instance của lớp DataView và nhận DataTable như đối số. Đoạn code sau khai báo đối tượng DataView và khởi tạo nó bằng cách sử dụng bảng authors từ DataSet tên objDataSet. Chú ý, chúng ta có thể truy cập tập hợp các bảng của đối tượng DataSet bằng cách xác định thuộc tính Tables và tẽn bảng: Dim objDataView=New DataView(objDataSet.Tables(“authors”)) Phương thức Sort: Mỗi khi một DataView được khởi tạo và chứa dữ liệu, bạn có thể thực thi dữ liệu. Ví dụ, giả sử chúng ta muốn sắp xếp dữ liệu theo một trật tự khác hơn so với trong DataSet. Để sắp xếp dữ liệu trong một DataView, chúng ta đặt phương thức Sort và xác định cột hoặc các cột mà chúng ta muốn sắp xếp. Đoạn code sau sắp xếp dữ liệu trong DataView theo họ và tên tác giả: ObjDataView.Sort=”au_fname,au_lname” Các chức năng sắp xếp luôn được thực hiện theo một trật tự tăng dần. Nếu chúng ta muốn thực hiện sắp xếp theo trật tự giảm dần cần phải thêm từ khoá DECS. Ví dụ: ObjDataView.Sort=”au_fname,au_lname DECS” Phương thức Find: Nếu chúng ta muốn tìm một dòng được chỉ định trong DataView, chúng ta gọi phương thức Find. Phương thức Find tìm dữ liệu trong cột khóa chính của DataView. Vì thế, trước khi gọi phuơng thức Find chúng ta cần phải sắp xếp DataView trong cột chứa dữ liệu mà ta muốn tìm. Cột mà DataView sắp xếp sẽ trở thành cột khóa chính trong đối tượng DataView. Nếu tìm thấy dòng dữ liệu thoả điều kiện tìm kiếm phương thức Find trả về vị trí của record trong DataView, còn ngược lại sẽ trả về giá trị –1. Nếu phương thức Find tìm thấy giá trị cần tìm, nó sẽ ngừng tìm kiếm và trả về vị trí mà nó tìm thấy. Ví dụ: ObjDataView.Sort=”au_fname” Intposition=ObjDataView.Find(“anne”) c. Thuộc tính RowsFilter: Khi chúng ta khởi tạo DataView, chúng ta có thể lọc các dòng của dữ liệu mà nó sẽ chứa. Thuộc tính RowFilter xác định tiêu chuẩn mà ta muốn ứng dụng trong DataView và chứa một tên cột theo sau bởi một biểu thức toán học. Ví dụ: Dim objDataView=New DataView(objDataSet.Tables(“authors”)) ObjDataView.RowsFilter=”au_lname = ‘Green’” 7. Giới thiệu các lớp SqlCommand và OleDbCommand: Hai lớp này hầu như đồng nhất, điểm khác biệt thực sự duy nhất đó là lớp Sqlcommand phô diễn một phương pháp thi hành để trả về một luồng XML mà lớp OleDbCommand không có. Đây là một khả năng được gán cho lớp SqlCommand dựa vào các khả năng XML của SQL Server 7.0 trở lên. Lớp OleDbCommand: Lớp OleDbCommand biểu diễn một query được tạo bởi một data source. Query này có thể là query Select, Insert, Update hoặc Delete và có thể được biểu diễn như một chuỗi SQL hoặc một Stored Procedure. Query này được thực thi có thể chứa các thông số hoặc không có chứa thông số. Chúng ta quan sát lớp OledbCommand vừa rồi trong OleDbDataAdapter, như thuộc tính Selectcommand thực sự đã được nhận từ lớp này. Trong phần OleDbcommand chúng ta sử dụng lớp này để thực thi một câu query được tạo bởi dữ liệu mà không sử dụng OleDbDataAdapter. Constructor cho lớp OleDbCommand có một vài biến, nhưng phương thức đơn giản nhất là khởi tạo một đối tượng OleDbCommand không có tham số. Sau đó, một khi đối tượng đã được khởi tạo bạn có thể đặt thuộc tính mà bạn cần thực thi vào. Đoạn code sau biểu diễn công việc khởi tạo một đối tượng OleDbCommand: Dim objCommand As OleDbCommand = New OleDbCommand() Thuộc tính Connection: Giống như đối tượng OleDbDataAdapter, có chứa nhiều thuộc tính mà chúng ta phải đặt trước khi chúng ta có thể thực thi một câu query. Thuộc tính đầu tiên là thuộc tính Connection. Thuộc tính này được đặt đến một đối tượng mà đối tượng này chứa một kết nối hoạt động đến cơ sở dữ liệu lưu trữ như đối tượng OleDbConnection. Ví dụ: objCommand.Connection=objConnection Thuộc tính CommandText và CommandType: Thuộc tính kế tiếp mà ta phải đặt là thuộc tính CommandText. Thuộc tính này xác định chuỗi SQL hoặc stored procedure được thực thi. Theo sau thuộc tính này là thuộc tính CommandType, thuộc tính này xác định thuộc tính CommandText được biên dịch như thế nào. Ví dụ: objCommand.Connection = objConnection objCommand.CommandText = "DELETE FROM phim WHERE maphim = ? " objCommand.CommandType = CommandType.Text hoặc: objCommand.Connection = objConnection objCommand.CommandText = "Deletephim" objCommand.CommandType = CommandType.StoredProcedure Thi hành lệnh: Để thi hành một lệnh và trả về các kết quả, ta triệu gọi một trong các phương thức sau: Phương thứcExecuteNonquery() ExecuteReader() ExecuteScalar() ExecuteXmlReader() Phương thứcExecuteNonquery() ExecuteNonquery() được dùng để thi hành các lệnh không trả về một tệp kết quả, chẳng hạn như các lệnh cập nhật, chèn, hoặc xóa. Phương pháp ExecuteNonquery() trả về một giá trị số nguyên nêu rõ số lượng các hàng mà lệnh tác động. Với mọi kiểu lệnh khác, -1 được trả về. Trong mã sau đây, ExecuteNonquery() trả về số lượng các hàng bị tác động bởi lệnh Delete objConnection.Open() objCommand.Connection = objConnection objCommand.CommandText = "DELETE FROM phim WHERE maphim =2 " objCommand.CommandType = CommandType.Text Try objCommand.ExecuteNonQuery() Catch err As OleDbException MessageBox.Show(err.Message) End Try objConnection.Close() Phương thức ExecuteReader(): ExecuteReader() trả về một đối tượng thực thi giao diện IdataReader, chẳng hạn như một OleDbReader hoặc một SqlDataReader. Phương pháp ExecuteReader() có thể chấp nhận một đối số tuỳ chọn, một thành viên của kiểu điểm danh commandBehavior. Kiểu điểm danh commandBehavior chỉ định một phần mô tả về kết quả và hiệu ứng trên cơ sở dữ liệu của lệnh truy vấn; các thành viên của nó gồm: CloseConnection – tuyến nối được đóng khi DataReader kết hợp được đóng. KeyInfo – lệnh truy vấn trả về thông tin khoá chính và cột. Lệnh truy vấn được thi hành mà không khóa trên các hàng đã lựa. Khi dùng KeyInfo, trình cung cấp dữ liệu SQL Server chắp một mệnh đề FOR BROWSE vào câu lệnh đang được thi hành. SchemaOnly – lệnh chỉ trả về thông tin cột và không tác động gì đến cơ sở dữ liệu. SequetialAccess – các kết quả của lệnh truy vấn được đọc tuần tự đến cấp cột. Điều này cho phép đọc dữ liệu nhị phân lớn bằng các phương pháp GetChars hoặc GetBytes. SingleResult – trả về một kết quả đơn lẻ. SingleRow –trả về một hàng dữ liệu đơn lẻ. Mã sau đây minh họa cách thực thi phương pháp ExecuteReader(): Public Sub CreateMyOleDbDataReader(mySelectQuery As String,myConnectionString As String) Dim myConnection As New OleDbConnection(myConnectionString) Dim myCommand As New OleDbCommand(mySelectQuery, myConnection) myCommand.Connection.Open() Dim myReader As OleDbDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) While myReader.Read() Console.WriteLine(myReader.GetString(0)) End While myReader.Close() myConnection.Close() End Sub Phương thức ExecuteScalar(): ExecuteScalar() trả về cột đầu tiên của hàng đầu tiên trong tệp kết quả; tất cả các cột và các hàng khác được bỏ qua. Phương pháp này đặc biệt hữu ích để trả về các giá trị kết tập (aggregate value), chẳng hạn như kết quả của câu lệnh SQL Select count (*). Dùng ExecuteScalar() ít thiên về mã hơn, và cũng yêu cầu ít tài nguyên hệ thống hơn so với việc dùng ExecuteReader() rồi triệu gọi phương pháp ExecuteReader.Read() để có giá trị trả về. Phương pháp ExecuteReader() tạo một luồng bộ đọc dữ liệu trên tuyến nối, ngăn cấm mọi thứ dùng tuyến nối cho đến khi đóng bộ đọc dữ liệu nhưng ExecuteScalar() không làm như thế. Đoạn mã sau đây minh hoạ cách thực thi phương pháp ExecuteScalar(): Public Sub CreateMyOleDbCommand(myScalarQuery As String, myConnection As OleDbConnection) Dim myCommand As New OleDbCommand(myScalarQuery, myConnection) myCommand.Connection.Open() myCommand.ExecuteScalar() myConnection.Close() End Sub 'CreateMyOleDbCommand Phương thức ExecuteXmlReader(): ExecuteXmlReader() chỉ sẳn có cho đối tượng SqlCommand. Tính chất CommandText của một lớp SqlCommand đang triệu gọi phương pháp ExecuteXmlReader() sẽ chứa một lệnh SQL với một mệnh đề FOR XML hợp lệ hoặc một lệnh trả về dữ liệu ntext theo dạng thức XML hợp lệ. Ví dụ: Public Sub CreateMyXmlReader(myXmlQuery As String, myConnection As SqlConnection) Dim myCommand As SqlCommand = New SqlCommand(myXmlQuery, myConnection) Try myConnection.Open() Dim myXmlReader As System.Xml.XmlReader = myCommand.ExecuteXmlReader() ' Always close the XmlReader when finished. myXmlReader.Close() Catch e As Exception Console.WriteLine(e.ToString()) Finally myConnection.Close() End Try End Sub Dùng các lớp SqlParameter và OleDbParameter: Các trình cung cấp dữ liệu .NET có gộp các lớp để tạo các đối tượng tham số có thể được bổ sung vào ParametersCollection của một lệnh. Các tham số được tạo bằng một tên, kiểu dữ liệu, phần chỉ định nhập hoặc xuất và một giá trị nếu áp dụng được. Cả hai lớp SqlParameter và OleDbParameter vận hành giống nhau : tuy nhiên, SqlParameter được truyền cho SQL Server dưới dạng các tham số hữu danh và phải ánh xạ theo các tên tham số trong các stored procedure. Để tạo các lệnh truy vấn T-SQL được tham số hoá, ta bổ sung một hoặc nhiều tham số vào câu lệnh T-SQL và bổ sung cùng các tham số vào sưu tập Parameters của lệnh. Điều này được minh hoạ trong mã sau đây: Dim objCommand As OleDbCommand = New OleDbCommand() objConnection.Open() objCommand.Connection = objConnection objCommand.CommandText = "insert into loaiphim" & _ "(tenlp) values(?);" objCommand.CommandType = CommandType.Text objCommand.Parameters.Add(New OleDbParameter()) objCommand.Parameters.Item(0).Direction = ParameterDirection.Input objCommand.Parameters.Item(0).DbType = DbType.String objCommand.Parameters.Item(0).Size = 30 objCommand.Parameters.Item(0).Value = txtTenLP.Text Try objCommand.ExecuteNonQuery() Catch err As OleDbException MessageBox.Show(err.Message) End Try objConnection.Close() CHƯƠNG II GIỚI THIỆU CHUNG VỀ SQL SERVER I. GIỚI THIỆU SQL SERVER: Microsoft SQL Server cho phép những ứng dụng Client điều khiển những thông tin được truy xuất từ Server bằng cách sử dụng một vài công cụ và kỹ thuật đặc biệt. Chúng ta cũng có thể xử lý thông tin trên máy Client khi cần thiết . Đặc điểm chính của SQL Server là một cơ sở dữ liệu quan hệ. Trong đó dữ liệu được tham khảo như những hàng và cột của hàng. Đối với mô hình quan hệ được thực hiện trong nó thì các hàng của bảng dữ liệu không được xếp thứ tự từ khi chúng ta tạo index cho bảng. Tuy nhiên chúng ta có thể truy xuất và hiển thị các hàng theo thứ tự nào đó. Chúng ta phải sử dụng những câu phát biểu của ngôn ngữ SQL thích hợp để truy xuất theo thứ tự đó. Mô hình quan hệ theo lý thuyết ban đầu yêu cầu mỗi hàng được định nghĩa độc lập bởi ít nhất một cột của bảng gọi là khóa (Primary key ). Việc yêu cầu mỗi hàng là duy nhất nhằm đảm bảo rằng mỗi hàm được truy xuất hay thay đổi độc lập và duy nhất với các hàng khác trong Table. Tuy nhiên SQL Server không đòi hỏi chúng ta định nghĩa những hàng trong Table là duy nhất. Thành phần của SQL Server là cơ sở dữ liệu quan hệ và cấu trúc của nó. SQL Server là cơ sở dữ liệu toàn diện, mạnh và an toàn với khả năng như sau: Microsoft SQL Server cho phép chúng ta định nghĩa đến 32676 Database, khó có ứng dụng nào vượt quá giới hạn cho phép trên. Trong các ứng dụng thông thường chỉ có vài Database trong một dịch vụ trên Serser. Chưa kể chúng ta định nghĩa đến hai tỷ Table cho một Database. Dễ thấy rằng không có nơi nào cần đến hai tỷ Table trong một cơ sở dử liệu. SQL Server cho phép chúng ta định nghĩa đến 250 cột cho mỗi Table, và nó cũng cho phép kết các cột từ 16 Table khác nhau trong một Query. SQL không giới hạn số hàng trong Table, tuy nhiên trên thực tế bị giới hạn bởi môi trường lưu trữ. Các Database và những Table của nó có thể được chứa trong nhiều đĩa vật lý. Microsoft SQL Server cho phép Database mở rộng đến 32 đĩa vật lý. Chúng ta có thể định nghĩa đến 250 index trong mỗi Table nhưng chỉ có một trong số đó là Clustered index. Index là một cấu trúc cho phép các hàng của Table được truy xuất nhanh hơn không sử dụng index. Trong Clustered index, những hàng của Table được sắp xếp thứ tự, duy trì và lưu trữ có thứ tự trên đĩa vật lý, các hàng được sắp xếp thứ tự thêm vào. Chúng ta thường định nghĩa index cho những cột được truy xuất thường xuyên để tăng tốc độ truy xuất. Index tốn không gian lưu trữ trong Database để chứa các cấu trúc index chúng ta cần định nghĩa index để tăng tốc độ truy xuất các hàng và thường ít khi dùng hết 250 index cho một Table. Các đối tượng dữ liệu SQL Server: Các cơ sở dữ liệu SQL Server bao gồm cả dữ liệu lẫn đối tượng cơ sở dữ liệu. Đối tượng cơ sở dữ liệu được dùng để chứa dữ liệu ( 1 đối tượng như một bảng chẳng hạn ) hoặc để tương tác với dữ liệu (một đối tượng như một thủ tục trử sẳn chẳng hạn ). Về cốt lõi mọi thứ do SQL Server quản lý đều là một đối tượng bao gồm một co sở dữ liệu SQL và mọi thứ mà từng cơ sở dữ liệu chứa một cơ sở dữ liệu có thể chứa các đối tượng khác nhau như bảng, kiểu xem, chỉ mục, kiểu cơ sở dữ liệu, trị ngầm định, qui tắc thủ tục trữ sẵn, lệnh ứng tác và các hạn chế. Bảng ( Table ) là đối tượng quan trọng nhất trong một cơ sở dữ liệu bởi vì đó là nơi lưu trữ dữ liệu. Các bảng được hình thành bởi các hàng [bảng ghi ][record] và các cột [ fields]. Trong một cơ sở dữ liệu có thể chứa nhiều đối tượng khác nhau nhưng trong SQL Server thì đối tượng bảng đóng vai trò quan trọng nhất vì nền tảng của cơ sở dữ liệu là “bảng “ , đồng thời bảng là những đối tượng có cơ sở dữ liệu chứa những dữ liệu trong SQL Server. Trong bảng dữ liệu được tổ chức theo dạng hàng _ cột như một bảng tính. Mỗi hàng biểu diễn một record duy nhất, mỗi cột biểu diễn một thuộc tính của record. Khi thiết kế cơ sở dữ liệu cần xác định rõ loại bảng cần có, loại dữ liệu cho từng bảng, ai có thể truy cập .. Để tạo và làm việc với bảng, nhiều loại đối tượng dữ liệu khác nhau được dùng bao gồm loại dữ liệu (datatype ), ràng buộc (constrains), mặc định (default), qui tắc (rules), bẫy (triggers ), khóa (keys) và chỉ định (indexes). Mỗi cột được gán cho một loại dữ liệu , xác định trị cho phép của cột đó. Có thể dùng Datatype của SQL Server hoặc Datatype mà người sử dụng tạo ( theo yêu cầu riêng ). Trong SQL Server mỗi cột trong record phải có một giá trị dù giá trị đó là null ( tuỳ loại Datatype mà giá trị Null có được nhận hay không). Bảng thường có một cột hay nhiều cột kết hợp mà giá trị của nó xác định duy nhất một hàng trong cột. Cột (hay các cột này ) gọi là khóa (Primary key ) của bản. Khóa không thể là Null. Tương tự các cơ sở dữ liệu của các ngôn ngữ khác ta cũng có khóa ngoại (Foreign key ). Foreign key có thể là Null nhưng tất cả các thành phần hợp thành Foreign key phải là Null. Kiểu xem: được tạo để đưa ra các cách thay thế khi xem dữ liệu lưu trữ trong bảng. Có thể tạo các kiểu xem để hiển thị một tập con dữ liệu từ chỉ một bảng hoặc có thể nối kết và tổ hợp hai hay nhiều bảng để tạo ra một kiểu xem. Bản thân các kiểu xem không chứa dữ liệu, chúng chỉ trỏ đến dữ liệu đã chọn trong các bảng và trình bày nó bằng hình ảnh . Chỉ mục : là những đối tượng có cơ sở dữ liệu dùng để tăng tốc độ truy cập dữ liệu. Các chỉ mục chứa các biến con trỏ được xếp theo thứ tự trỏ đến dữ liệu lưu trữ trong các bảng. SQL Server có hai kiểu chỉ mục khác nhau : Chỉ mục kết cụm : buộc các hàng trong bảng, thực tế lưu trữ theo thứ tự sấp xếp dùng một cột của bảng để sấp xếp các hàng . Chỉ mục phi cụm : không thực tế dàn xếp dữ liệu mà trỏ đến dữ liệu trong bảng . Kiểu dữ liệu : Định nghĩa hoặc mô tả kiểu dữ liệu có thể được đưa vào một cột và cách mà nó được SQL Server lưu trữ. Kiểu dữ liệu phải được chỉ định cho mọi cột trong bảng . Trị ngầm định :là những giá trị được tự động nhập vào các cột khi không có giá trị nào được nhập vào đó trong khi nhập liệu. Các trị ngầm định có thể được gán cho bất kỳ cột nào trong bảng . Qui tắc [rules]: là những đối tượng có cơ sở dữ liệu được dùng để điều khiển các dữ liệu có thể nhập vào một bảng. Đây là trường hợp ngăn ngừa việc nhập sai dữ liệu vào một bảng. Các thủ tục lưu trữ sẵn: là những đối tượng có cơ sở dữ liệu mạnh và linh hoạt cho phép bạn tự động hóa nhiều công việc. Chúng bao gồm nhiều điều lệnh Transact-SQL biên dịch sẵn, thi hành một hay một loạt công việc định sẵn. Mọi thủ tục lưu trữ sẵn thường bắt đầu bằng các ký tự “sp-“ và được lưu trữ trong cơ sở dữ liệu Master. Nếu thủ tục lưu trữ sẵn được nhập từ công cụ SQL Query thì nó sẽ được thực thi và thông tin trợ giúp về các cơ sở dữ liệu do SQL Server quản lý xuất hiện. SQL Server có thể thực hiện bao gồm việc chèn, cập nhật và xoá records. Trigger: là một kiểu thủ tục lưu trữ sẵn đặc biệt thi hành mỗi khi xảy ra các sự kiện cụ thể cho một bảng. Ví dụ mỗi khi chèn, cập nhật hay xoá dữ liệu trong một bảng. Trigger có thể tự động phát động, thi hành một loạt lệnh T-SQL có trong Trigger. Thực hiện hầu hết những công việc mà SQL có thể thực hiện. Hạn chế [Constraints] : Dùng để củng cố tính nguyên vẹn dữ liệu. Trong nhiều cách chúng cũng giống như các kiểu dữ liệu, trị ngầm định, qui tắc và lệnh ứng tác, tất cả đều được dùng để củng cố tính nguyên vẹn dữ liệu. II. BẢO MẬT CỦA SQL SERVER: Có 3 mức độ như sau: Standard Security: đòi hỏi chúng ta login vào SQL phải sử dụng UserName và ID. Integrated security: chúng ta chỉ cần login vào mạng Windows NT, không cần login lần thứ hai vào SQL Server chúng ta vẫn được nhắc khi vào SQL Server nhưng UserName trong SQL Server được lấy từ login ID của mạng. Mixered security: cho phép chúng ta vào SQL Server hoặc sử dụng Integrated login vào Windows NT. Integrated login được sử dụng với sự kết nối Client đến Server sử dụng Name pipe. III. CÁC KIỂU DỮ LIỆU TRONG SQL SERVER: Trong SQL Server có rất nhiều kiểu dữ liệu, rất đa dạng từ loại lưu trữ từng bit nhị phân đến loại chứa đến hai tỷ bytes dữ liệu. Trong phạm vi đề tài chỉ trình bày những kiểu dữ liệu có sử dụng trong các Table của chương trình. Chúng ta có thể sử dụng datatype có sẳn của SQL Server hoặc có thể tạo datatype mới. Trong SQL Server có những kiểu data chuẩn sau: Numeric Integer (Int, Smallint, tintint); Numeric Floatinpoint (real, float(n), decimal(n)); Character( char, varchar); datetime; small datetime; bit; binary; text; image; money; smallmoney; sysname Trong phần này chỉ giới thiệu một số kiểu data chính: Real: kiểu số thực. Char(n): kiểu chuổi ký tự có độ dài tối đa n ký tự. Bit: chỉ có giá trị 0 hoặc 1. Datetime: kiểu ngày. Text và image: giống kiểu memo của Fox, chiều dài tối đa có thể lên tới 2,147,483,647 byte. Có một điều lưu ý là đây không phải là kiểu dữ liệu dùng để lưu trữ hình ảnh. Numeric(m,n): kiểu số có phần thập phân (n). Int : loại này có thể chứa tất cả các số nguyên dương và số nguyên âm . Smallint: loại này có thể chứa các số nằm trong khoảng –32.768 à 32.767. mỗi giá trị được lưu trữ trong kiểu này sử dụng 15 bit chứa giá trị và một bit dấu. Varchar: là một loại chứa những chuổi ký tự có chiều dài thay đổi, chiều dài tối đa là 255 ký tự. Loại này không giống với loại char nghĩa là các khoảng trắng không được thêm vào cuối chuỗi khi chiều dài chuỗi nhỏ hơn chiều dài tối đa được khai báo. Text: kiểu này cho phép lưu trữ từ 1 đến 2147483647 bytes data. IV. CẤU TRÚC CỦA CƠ SỞ DỮ LIỆU: Trong cấu trúc logic của cơ sở dữ liệu này có thể khác biệt với cấu trúc của một cơ sở dữ liệu khác, thì cấu trúc vật lý của hệ thống cơ sở dữ liệu cũng khác nhau một cách đáng kể. Những máy Mainframe rõ ràng là khác hẳn những máy Minicomputer và lại khác biệt nhiều hơn nữa so với những máy PC. Nhưng tất cả loại máy này đều có thể chạy những hệ thống quản trị cơ sở dữ liệu. Cấu trúc của những hệ thống quản trị cơ sở dữ liệu này tuỳ thuộc vào phần cứng và tuỳ thuộc vào kiểu truy xuất dữ liệu yêu cầu. Có một số phương thức theo đó bạn có thể thành lập cơ cấu cho một hệ thống máy tính để giúp bạn truy xuất cơ sở dữ liệu, nhưng dù sao thì những phương thức này cũng chỉ rơi vào một trong hai loại: Cơ cấu đơn lẻ. Cơ cấu nhiều người sử dụng. Trong một cơ cấu đơn lẻ thì chỉ có một máy PC, máy này vừa làm máy chủ cho cơ sở dữ liệu vừa dành cho người sử dụng. Trong một hệ thống nhiều người sử dụng, nhiều người có thể truy xuất cơ sở dữ liệu đồng thời; cơ sở dữ liệu có thể ở trên một máy PC hoặc trải trên nhiều máy. Hệ thống cơ sở dữ liệu đơn lẻ: Một hệ thống cơ sở dữ liệu đơn lẻ thì chỉ bao gồm một máy PC. Dữ liệu thì lưu trú trong ký ức máy còn người sử dụng thì ngồi trước màn hình và tay gỏ trên phím. Hệ quản trị cơ sở dữ liệu trong trường hợp này là một phần mềm tích hợp đơn độc. Vì một hệ thống như thế, mỗi lúc chỉ phục vụ một người, nên những hệ thống cơ sỡ dữ liệu đơn lẻ và những áp dụng kết hợp với chúng tương đối nhỏ. Kiểu khai thác nói trên thường phung phí rất nhiều năng lực của máy PC. Trong lúc mà người sử dụng đặt ngón tay vào bàn phím để thực hiện bấm một phím thì máy PC có thể thi hành hàng triệu chỉ thị. Vì thế, những máy PC chạy đơn lẻ và sử dụng trong việc khai thác những cơ sở dữ liệu nhỏ sẽ phí thời gian rất nhiều vào việc chờ điều hành viên thực hiện một thao tác nào đó. Hệ thống cơ sở dữ liệu nhiều người sử dụng: Bạn có thể nhận ra ngay tên gọi của nó, hệ thống cơ sở dữ liệu nhiều người sử dụng có thể sử dụng đồng thời cho nhiều người. Điều này rất hay theo quan quan điểm về hiệu quả sử dụng, bởi vì hệ thống có thể lo chuyện đáp ứng yêu cầu của người sử dụng này trong lúc chờ đợi người khác nhập liệu. Có bốn cấu hình khác nhau có thể chu cấp khả năng khai thác nhiều người sử dụng: Khai thác từ xa Client/Server Cấu trúc chia sẻ nguồn lực hệ thống. Khai thác dữ liệu theo kiểu phân bố. Khai thác từ xa: Phương thức tiếp cận trước đây là hệ thống khai thác từ xa, trong đó một bộ xử lý trung tâm có năng lực sẽ được kết nối với nhiều máy đầu cuối có tên gọi là “Dumb Teminals”. Người sử dụng tương tác với cơ sở dữ liệu thông qua máy đầu cuối này. Phương pháp này được trình bày trong hình sau, có những mặt hạn chế đáng kể. Bởi vì chỉ có một đơn vị xử lý lo mọi chuyện nên hiệu năng của hệ thống sẽ bị giảm sút một cách đáng kể khi số người sử dụng tăng thêm. Hiệu năng của hệ thống cũng tuỳ thuộc vào bề rộng của băng truyền dữ liệu ( khả năng truyền tải thông tin) được dùng để nối đơn vị xử lý trung tâm với những người sử dụng. Bề rộng băng truyền càng nhỏ thì càng ít thông tin được truyền tải mỗi giây trên kênh truyền. Khi bạn tăng thêm số người sử dụng hệ thống thì băng truyền dữ liệu dễ bị “kẹt” vì số lượng lưu thông nhiều hơn. Hơn nữa, những máy PC đủ năng lực để hỗ trợ đối với một số lượng lớn người sử dụng thỉ thường là những máy Mainframe rất đắt tiền. PC PC PC WINDOWS NT SERVER SQL SERVER DATABASE MÔ HÌNH LAN VỚI WINDOWS NT VÀ SQL SERVER DATABASE Client/Server: Một cấu hình nhiều người sử dụng thứ hai là cấu hình theo kiểu Client/Server. Trong hệ thống này, một đơn vị xử lý trung tâm gọi là máy chủ (Server) sẽ được nối với nhiều máy Pc khác gọi là Client. Người sử dụng chỉ cần ngồi ngay tại máy PC ở Client, ở máy đó chạy những hệ thống áp dụng khai thác trên một cơ sở dữ liệu nằm ở máy Server. Vì những máy Client chỉ hành xử phần việc khai thác có ý nghĩa riêng đối với nó (phần áp dụng tại trạm Client), nên máy Server đang chạy như môt động cơ chính của hệ quản trị cơ sở dữ liệu, có thể tập trung vào việc xử lý dữ liệu. Database Engine là thuật ngữ dùng để chỉ bộ phận của hệ quản trị cơ sở dữ liệu tác động trực tiếp với dữ liệu của hệ thống. Máy Server thông minh thuộc một hệ thống Client/Server được gọi là Database Server. Máy này có thể là một máy vi tính không đắt lắm không cần phải là một máy điện toán Mainframe đắt tiền, bởi vì trách nhiệm khai thác mà nó phải gánh chịu thì ít hơn nhiều so với máy điện toán dùng làm đơn vị xử lý trung tâm thuộc một hệ thống khai thác từ xa và có cùng số người sử dụng. Một hệ thống theo cấu trúc Client/Server có thể có nhiều Server, nhưng nếu như thế thì mỗi Server sẽ lưu trữ những tập tin cơ sở dữ liệu khác nhau. Hình sau trình bày một sơ đồ tổ chức tiêu biểu của hệ thống theo cấu trúc Client/Server. Operating System Network interface DBMS Operating System Storage System I/F Operating System Network interface Application1 Application2 Use1 Operating System Network interface Application2 Application3 Application4 Use2 Database Cấu trúc chia sẻ nguồn lực hệ thống: Cách tiếp cận thứ ba đối với một hệ thống điện toán nhiều người sử dụng là phương thức chia sẻ nguồn lực hệ thống. Cơ cấu này thì tương tự với cơ cấu Client/Server theo nghĩa sau đây: nhiều máy quản gia được nối với những máy vi tính của người sử dụng, một trong những máy Server quản gia này sẽ cung cấp một giao diện cho một người sử dụng. Tuy nhiên, sự phân công “lao động” giữa các máy của người sử dụng và máy Server lại khác nhau. Trong một hệ thống theo cơ cấu chia sẻ nguồn lực thì có những máy quản gia tập tin (File Server) chứ không phải là những Database Server. Máy quản trị tập tin chỉ chứa dữ liệu thôi chứ không chứa hệ quản trị cơ sở dữ liệu. Máy quản trị tập tin không thực hiện việc khai thác cơ sở dữ liệu. Hệ quản trị cơ sở dữ liệu thì nằm trên những máy của người sử dụng và nó truy xuất dữ liệu chứa trên những máy File Server thuộc mạng cục bộ. Bạn nên nhớ rằng không có hệ quản trị cơ sở dữ liệu trên máy File Server. Mọi tác vụ khai thác chủ yếu đều được thực hiện trên những máy của client. Cách tổ chức theo cơ cấu chia sẻ nguồn lực hệ thống xem có vẻ cũ và kém hiệu quả hơn cơ cấu Client/Server. Bởi vì cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu được lưu trữ tách biệt nhau và chỉ được nối với nhau bằng mạng cục bộ. Như vậy, mạng Lan sẽ phải gánh chịu một lượng thông tin truyền tải rất nặng khi mà toàn bộ các tập tin dữ liệu được truyền đi đi về về như một con thoi trên mạng. Hơn nữa khi một người sử dụng nào đó khai thác trên một tập tin thì tất cả những người sữ dụng khác sẽ bị khoá chốt không cho xen vào để tránh việc làm hỏng tập tin có thể xảy ra. Điều này có thể làm chậm hoạt động khai thác một cách đáng kể. Khai thác dữ liệu theo kiểu phân bố: Kiểu hệ thống khai thác phân bố sẽ sử dụng nhiều Server cũng như nhiều Client. Tuy nhiên nó lại khác biệt với hệ thống nhiều người sử dụng theo cơ cấu Client/Server ở chỗ nhiều máy Server có thể cùng bảo quản những bảng dữ liệu thuộc cơ sở dữ liệu. Nhờ có dữ liệu trên nhiều máy Server như vậy nên hệ thống tránh được sự tranh chấp thời gian của Server, dẫn đến kết quả làm tăng hiệu suất khai thác. Tuy nhiên, những hệ thống như thế phải được kiểm soát một cách cẩn thận để bảo đảm rằng dữ liệu chứa trên các server này không trở nên mất đồng bộ với những dữ liệu tương ứng trên các Server khác. Tất cả những bản sao của cơ sở dữ liệu phải như nhau ở “ mọi lúc mọi nơi”, nếu không, sự toàn vẹn của hệ thống sẽ bị phá vỡ. PHẦN II PHÂN TÍCH THIẾT KẾ HỆ THỐNG CHƯƠNG I ĐẶT TẢ YÊU CẦU CỦA HỆ THỐNG A.CÁC YÊU CẦU VỀ CHỨC NĂNG: Gồm hai chức năng chính: Quản lý công việc bán phim cho đại lý. Quản lý công việc mua phim từ các nhà cung cấp phim. Quản lý công việc bán phim cho đại lý: a . Nhận đơn đặt phim từ các đại lý: Đối với yêu cầu chứa năng: Kiểm tra đơn đặt phim theo mã đại lý trong tập danh mục đại lý, nếu đơn hợp lệ thì chuyển qua bộ phận xử lý đơn đặt phim. Nếu đơn không hợp lệ thì hướng dẫn cho đại lý lập đơn đặt phim mới, với đại lý mới chưa có tên trong danh mục đại lý thì chuyển qua bộ phận nhận đại lý mới. Đối với yêu cầu người sử dụng: Được trang bị một máy vi tính nối mạng cục bộ của công ty. Nhân viên có khả năng thao tác truy xuất, xem trong danh mục đại lý có đại lý đó chưa. Không cho truy xuất ngoài khả năng cho phép. Màn hình giao diện đơn giản để sử dụng. b. Nhận đại lý mới: Yêu cầu chức năng: Các thủ tục đơn giản, khi có đại lý mới đến đặt phim thì cập nhật đại lý mới vào danh mục đại lý và cho đại lý mới một mã số riêng. Yêu cầu người sử dụng: Được trang bị một máy vi tính nối mạng cục bộ. Được phép chỉnh sữa, cập nhật trên bảng danh mục đại lý. Trong danh mục đại lý mã số đại lý không được trùng nhau. Màn hình giao diện đơn giản, thuận tiện cho việc cập nhật dữ liệu hoặc chỉnh sữa theo yêu cầu. c. Xử lý đơn đặt phim: Yêu cầu chức năng: Căn cứ vào đơn đặt phim đã hợp lệ, từ mã đại lý, mã phim đặt mua để kiểm tra. Nếu phim hiện có thì lập hoá đơn bán phim cho đại lý, sau đó lưu hoá đơn đó vào hệ thống. Nếu phim trong đơn đặt phim không có hoặc thiếu thì báo cho bộ phận in sang, trường hợp bộ phận in sang không đáp ứng được yêu cầu của đại lý thì báo cho đại lý biết và hiệu chỉnh lại đơn đặt phim. Yêu cầu người sử dụng: Chương trình được xử lý trên máy vi tính nối mạng. Nhân viên xử lý đơn đặt phim phải có khả năng sử dụng máy nhất định, phải qua huấn luyện để sử dụng phần mềm hệ thống truy xuất dữ liệu nhanh chóng, tạo lập các hoá đơn và cập nhật dữ liệu mới kịp thời đảm bảo cho hệ thống không bị gián đoạn. Quản lý công việc mua phim từ các nhà cung cấp: Lập đơn mua phim: Yêu cầu chức năng: Dựa vào phim mới được sản xuất mà công ty chưa mua được bản quyền và nhu cầu do đại lý đặt ra để tạo nên hoá đơn mua phim mới. Tạo lập đơn mua phim mới từ các nhà cung cấp căn cứ vào danh mục các nhà cung cấp, nếu nhà cung cấp được liên hệ mua phim lần đầu tiên thì chuyển qua bộ phận nhận nhà cung cấp mới. Sau khi lập sau đơn mua phim thì chuyển sang bộ phận xử lý mua phim. Yêu cầu người sử dụng: Được trang bị một máy vi tính nối mạng cục bộ. Nhân viên có khả năng truy xuất xem danh mục nhà cung cấp có nhà cung cấp đó chưa. Không cho phép truy xuất ngoài khả năng cho phép. Màn hình đơn giản dễ sử dụng. Nhận nhà cung cấp mới: Yêu cầu chức năng: Các thủ tục đơn giản, khi cần mua phim từ một nhà cung cấp phim mới thì cập nhật nhà cung cấp mới vào tập danh mục nhà cung cấp và cho nhà cung cấp mới một mã riêng. Yêu cầu người sử dụng: Được trang bị một máy vi tính nối mạng cục bộ. Được phép chỉnh sữa, cập nhật trên bảng danh mục nhà cung cấp. Trong danh mục nhà cung cấp các mã số nhà cung cấp không được trùng nhau. Màn hình giao diện đơn giản dễ sử dụng. Xử lý công việc mua phim: Yêu cầu chức năng: Sau khi được phía nhà cung cấp chấp nhận yêu cầu của đơn mua phim thì lưu đơn mua phim vào hệ thống. Phim mới nhập về sẽ được chuyển qua cho bộ phận nhận phim mới. Yêu cầu người sử dụng: Chương trình được xử lý trên máy vi tính nối mạng. Nhân viên xử lý đơn mua phim phải có khả năng sử dụng máy nhất định, phải qua huấn luyện để sử dụng phần mềm hệ thống truy xuất dữ liệu nhanh chóng, tạo lập các hoá đơn và cập nhật dữ liệu mới kịp thời đảm bảo cho hệ thống không bị gián đoạn. Nhận phim mới: Yêu cầu chức năng: Khi phim mới được nhập về nó được lưu và trong tập danh mục phim. Mỗi phim có một mã riêng để phân biệt với các phim khác. Yêu cầu người sử dụng: Được trang bị một máy vi tính nối mạng cục bộ. Được phép chỉnh sữa ,cập nhật trên bảng danh mục phim. Trong danh mục phim các mã số phim không được trùng nhau. Màn hình giao diện đơn giản dễ sử dụng. B.MÔ HÌNH XỬ LÝ: Sơ đồ ngữ cảnh: Đơn đặt hàng chi tiết yêu cầu Yêu cầu cung cấp phim đơn bán phim chi tiết yêu cầu yêu cầu đơn mua phim chi tiết Nhà cung cấp Đại lý Hệ thống quản lý mua bán phim Bộ phận mua phim Bộ phận bán phim Sơ đồ DFD:

Các file đính kèm theo tài liệu này:

  • docphandau.doc
  • docphancuoi.doc
  • docsodo DFD.doc
Tài liệu liên quan